2013-07-11 22 views
53

Come posso creare nuovo File (da java.io) in memoria, non sul disco rigido?come creare un nuovo file java.io.File in memoria?

Sto utilizzando il linguaggio Java. Non voglio salvare il file sul disco rigido.

+7

Così si vuole solo byte di memoria? –

+5

Cosa stai provando a * fare * con questo 'File'? –

+4

Un file 'per definizione si trova sul disco rigido. –

risposta

19

Per scrivere a un ruscello, nella memoria, utilizzare:

new ByteArrayOutputStream(); 
0

È possibile utilizzare un java.io.StringWriter.

51

Come posso creare un nuovo file (da java.io) in memoria, non sul disco rigido?

Forse si confondono File e Stream:

  • Un File è una rappresentazione astratta di file e la directory percorsi. Utilizzando un oggetto File, è possibile accedere ai metadati del file in un file system ed eseguire alcune operazioni sui file su questo file system, come eliminare o creare il file. Ma la classe File non fornisce metodi per leggere e scrivere il contenuto del file.
  • Per leggere e scrivere da un file, si sta utilizzando un oggettoo FileOutputStream. Questi stream possono essere creati da un oggetto File e quindi essere utilizzati per leggere e scrivere sul file.

È possibile creare un flusso sulla base di un buffer di byte che risiede in memoria, utilizzando un ByteArrayInputStream e un ByteArrayOutputStream a leggere e scrivere in un buffer byte in un modo simile di leggere e scrivere da un file. L'array byte contiene il contenuto di "File". Non hai quindi bisogno di un oggetto File.

Sia il File... ei ByteArray... flussi ereditano da java.io.OutputStream e java.io.InputStream, rispettivamente, in modo che è possibile utilizzare la superclasse comune per nascondere se si sta leggendo da un file o da un array di byte.

+62

Non sono sicuro se questo è ciò che voleva il poster originale, ma un esempio in cui un "File in memoria" sarebbe utile quando si vuole riutilizzare una libreria esistente che ha bisogno di un file java.io.File come parametro di input, ma in realtà vuoi usare "file" archiviati in memoria. In tal caso, penso che una soluzione sarebbe utilizzare Apache Commons VFS per creare un'istanza di DefaultFileSystemManager e utilizzarla per creare un RamFileProvider. Avrei aggiunto questo come una (più completa) risposta corretta, ma sembra che questa domanda sia stata chiusa qualche tempo fa ... –

+1

+1 stavo cercando questo tipo di soluzione, al test unitario venire componente senza dover usare un file attuale – GClaramunt

+2

Se non si desidera creare "un file reale", è possibile provare a creare un file temporaneo. Vedi 'createTempFile' per' java.io.file'. Questo file può essere impostato per l'eliminazione automatica al termine del test dell'unità. –