2011-08-16 8 views
68

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. Dovrei aggiungere che i dati String non esistono in un file (quindi non posso leggere i miei dati da un file).Creare un oggetto File in memoria da una stringa in Java

Posso utilizzare flussi e "trasmetterli" su oggetti File?

+2

Puoi collegare/pubblicare il codice che accetta un oggetto 'File'? Come le risposte hanno dichiarato, un oggetto 'File' è come un riferimento a una posizione nel filesystem, e quindi sarebbe difficile da simulare senza un file reale. Se, tuttavia, la tua funzione ha richiesto un 'FileReader' o un' FileInputStream', puoi facilmente modificare il codice per accettare input non file. – 101100

+0

I file mappati in memoria possono essere la vostra scelta. Questi sono file speciali in Java che consentono al programma Java di accedere ai contenuti direttamente dalla memoria. Per ulteriori dettagli, consultare questo link: http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

risposta

32

No; le istanze della classe File rappresentano un percorso in un filesystem. Pertanto, è possibile utilizzare quella funzione solo con un file. Ma forse c'è un sovraccarico che prende invece un InputStream?

+0

No:/Nessuna funzione di sovraccarico –

-1
FileReader r = new FileReader(file); 

Utilizzare un lettore di file per caricare il file e quindi scriverne il contenuto in un buffer di stringa.

example

Il link qui sopra mostra un esempio di come per ottenere questo risultato. Come altri post di questa risposta dicono di caricare un file in memoria non è necessario l'accesso in scrittura a condizione che non si intenda apportare modifiche al file effettivo.

7

Un oggetto File in Java è una rappresentazione di un percorso di una directory o di un file, non del file stesso. Non è necessario avere accesso in scrittura al file system per creare un oggetto File, è necessario solo se si ha intenzione di scrivere in realtà per il file (utilizzando un FileOutputStream per esempio)

3

La classe File rappresenta l ' "idea" di un file, non un handle reale da utilizzare per I/O. Questo è il motivo per cui la classe File ha un metodo .exists(), per dirti se il file esiste o meno. (Come si può avere un oggetto

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

+2

Buon punto; non risponde alla domanda però. – Jus12

47

Di solito quando un metodo accetta un file, c'è un altro metodo nelle vicinanze che accetta uno stream. Se questo non è il caso, l'API è mal codificata. In caso contrario, è possibile utilizzare i file temporanei, in cui generalmente viene concessa l'autorizzazione in molti casi. Se è un'applet, puoi request write permission.

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

Impossibile richiedere il permesso di scrittura (è Google AppEngine) –

Problemi correlati