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"?
File
Objekt nimmt, verknüpfen / posten ? Wie in den Antworten angegeben, ist einFile
Objekt wie ein Verweis auf einen Speicherort im Dateisystem und daher ohne eine tatsächliche Datei schwer zu simulieren. Wenn Ihre Funktion jedoch aFileReader
oder a benötigtFileInputStream
, können Sie den Code leicht so ändern, dass keine Dateieingaben akzeptiert werden.Antworten:
Nein; Klasseninstanzen
File
repräsentieren einen Pfad in einem Dateisystem. Daher können Sie diese Funktion nur mit einer Datei verwenden. Aber vielleicht gibt es eine Überlastung, dieInputStream
stattdessen eine braucht ?quelle
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:
quelle
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
File
Objekt zu erstellen . Sie benötigen es nur, wenn Sie tatsächlich in die Datei schreiben möchten ( z. B. mit einem FileOutputStream ).quelle
Die
File
Klasse stellt die "Idee" einer Datei dar, kein tatsächliches Handle, das für E / A verwendet werden soll. Aus diesem Grund verfügt dieFile
Klasse über eine.exists()
Methode, mit der Sie feststellen können, ob die Datei vorhanden ist oder nicht. (Wie können Sie einFile
Objekt 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.quelle
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.
quelle