Erstellen Sie ein Dateiobjekt im Speicher aus einer Zeichenfolge in Java

113

Ich habe eine Funktion, die Datei als Argument akzeptiert. Ich möchte keine neue Datei erstellen / schreiben (ich habe keinen Schreibzugriff auf das Dateisystem), um meine Zeichenfolgendaten an die Funktion zu übergeben. Ich sollte hinzufügen, dass die String-Daten nicht in einer Datei vorhanden sind (daher kann ich meine Daten nicht aus einer Datei lesen).

Kann ich Streams verwenden und sie in Dateiobjekte "umwandeln"?

Jon Romero
quelle
2
Können Sie den Code, der ein FileObjekt nimmt, verknüpfen / posten ? Wie in den Antworten angegeben, ist ein FileObjekt wie ein Verweis auf einen Speicherort im Dateisystem und daher ohne eine tatsächliche Datei schwer zu simulieren. Wenn Ihre Funktion jedoch a FileReaderoder a benötigt FileInputStream, können Sie den Code leicht so ändern, dass keine Dateieingaben akzeptiert werden.
101100
Speicherzugeordnete Dateien können Ihre Wahl sein. Dies sind spezielle Dateien in Java, mit denen Java-Programme direkt aus dem Speicher auf Inhalte zugreifen können. Für Details gehen Sie bitte über diesen Link: javarevisited.blogspot.com/2012/01/…
Bacteria

Antworten:

48

Nein; Klasseninstanzen Filerepräsentieren einen Pfad in einem Dateisystem. Daher können Sie diese Funktion nur mit einer Datei verwenden. Aber vielleicht gibt es eine Überlastung, die InputStreamstattdessen eine braucht ?

Meriton
quelle
75

Wenn eine Methode eine Datei akzeptiert, befindet sich normalerweise eine andere Methode in der Nähe, die einen Stream akzeptiert. Ist dies nicht der Fall, ist die API schlecht codiert. Andernfalls können Sie temporäre Dateien verwenden, für die in vielen Fällen normalerweise eine Berechtigung erteilt wird. Wenn es sich um ein Applet handelt, können Sie eine Schreibberechtigung anfordern .

Ein Beispiel:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}
Chris Dennett
quelle
1
Schreibberechtigung kann nicht angefordert werden (es ist Google AppEngine)
Jon Romero
12

Ein Dateiobjekt in Java ist eine Darstellung eines Pfads zu einem Verzeichnis oder einer Datei, nicht die Datei selbst. Sie benötigen keinen Schreibzugriff auf das Dateisystem, um ein FileObjekt zu erstellen . Sie benötigen es nur, wenn Sie tatsächlich in die Datei schreiben möchten ( z. B. mit einem FileOutputStream ).

Kevin K.
quelle
1
Wenn Sie eine Datei an eine externe API übergeben müssen, benötigen Sie eine tatsächliche Datei. Die Übergabe eines "leeren" Dateiobjekts funktioniert nicht.
Andrei Volgin
8

Die FileKlasse stellt die "Idee" einer Datei dar, kein tatsächliches Handle, das für E / A verwendet werden soll. Aus diesem Grund verfügt die FileKlasse über eine .exists()Methode, mit der Sie feststellen können, ob die Datei vorhanden ist oder nicht. (Wie können Sie ein FileObjekt haben, das nicht existiert?)

Im Gegensatz dazu erhalten new FileInputStream(new File("/my/file"))Sie beim Erstellen von a einen tatsächlichen Stream, aus dem Sie Bytes lesen können.

wberry
quelle
-1
FileReader r = new FileReader(file);

Verwenden Sie einen Dateireader, laden Sie die Datei und schreiben Sie ihren Inhalt in einen Zeichenfolgenpuffer.

Beispiel

Der obige Link zeigt Ihnen ein Beispiel, wie Sie dies erreichen können. Wie in anderen Beiträgen zu dieser Antwort angegeben, benötigen Sie zum Laden einer Datei keinen Speicherzugriff, solange Sie keine Änderungen an der tatsächlichen Datei vornehmen möchten.

Cristian
quelle