Crea un oggetto File in memoria da una stringa in Java


113

Ho una funzione che accetta File come argomento. Non voglio creare / scrivere un nuovo file (non ho accesso in scrittura al filesystem) per passare i miei dati di stringa alla funzione. Devo aggiungere che i dati della stringa non esistono in un file (quindi non posso leggere i miei dati da un file).

Posso utilizzare Stream e "trasmetterli" a oggetti File?


2
Puoi collegare / inserire il codice che accetta un Fileoggetto? Come hanno affermato le risposte, un Fileoggetto è come un riferimento a una posizione nel filesystem e quindi sarebbe difficile da simulare senza un file effettivo. Se, tuttavia, la tua funzione ha preso un FileReadero un FileInputStream, potresti facilmente modificare il codice per accettare input non di file.
101100

I file mappati in memoria possono essere la tua scelta. Questi sono file speciali in Java che consentono al programma Java di accedere ai contenuti direttamente dalla memoria. Per i dettagli si prega di passare attraverso questo link: javarevisited.blogspot.com/2012/01/…
Bacteria

Risposte:


48

No; istanze di classe Filerappresentano un percorso in un filesystem. Pertanto, è possibile utilizzare quella funzione solo con un file. Ma forse c'è un sovraccarico che prende InputStreaminvece un ?


76

Di solito quando un metodo accetta un file, c'è un altro metodo nelle vicinanze che accetta un flusso. Se questo non è il caso, l'API è codificata male. In caso contrario, è possibile utilizzare file temporanei, in cui l'autorizzazione viene generalmente concessa in molti casi. Se è un'applet, puoi richiedere il permesso di scrittura .

Un esempio:

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) {
}

1
Impossibile richiedere il permesso di scrittura (è Google AppEngine)
Jon Romero

12

Un oggetto File in Java è una rappresentazione di un percorso a una directory o un file, non il file stesso. Non è necessario disporre dell'accesso in scrittura al filesystem per creare un Fileoggetto, è necessario solo se si intende effettivamente scrivere sul file (utilizzando un FileOutputStream per esempio)


1
Se è necessario passare un file a un'API esterna, è necessario un file effettivo - il passaggio di un oggetto File "vuoto" non funzionerà.
Andrei Volgin,

8

La Fileclasse rappresenta l '"idea" di un file, non un vero e proprio handle da utilizzare per l'I / O. Questo è il motivo per cui la Fileclasse ha un .exists()metodo, per dirti se il file esiste o meno. (Come puoi avere un Fileoggetto che non esiste?)

Al contrario, la costruzione di a new FileInputStream(new File("/my/file"))ti dà un flusso effettivo da cui leggere i byte.


-1
FileReader r = new FileReader(file);

Utilizzare un lettore di file caricare il file e quindi scrivere il suo contenuto in un buffer di stringhe.

esempio

Il collegamento sopra mostra un esempio di come eseguire questa operazione. Come altri post a questa risposta dicono per caricare un file in memoria non è necessario l'accesso in scrittura fintanto che non si prevede di apportare modifiche al file effettivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.