2010-03-29 10 views
8

OK, mi sento come se dovesse essere semplice ma ovviamente manco qualcosa di fondamentale per la scrittura di file in Java. Ho questo:Eccezione FileNotFound quando si prova a scrivere su un file

File someFile = new File("someDirA/someDirB/someDirC/filename.txt"); 

e voglio solo scrivere sul file. Tuttavia, mentre alcuniDirA esiste, alcuniDirB (e quindi alcuniDirC e filename.txt) non esistono. In questo modo:

BufferedWriter writer = new BufferedWriter(new FileWriter(someFile)); 

getta un FileNotFoundException. Beh, ehm, non sto scherzando. Sto provando a crearlo dopo tutto. Devo suddividere il percorso del file in componenti, creare le directory e quindi creare il file prima di creare un'istanza dell'oggetto FileWriter?

risposta

16

È necessario creare prima tutte le directory precedenti. E here è come farlo. È necessario creare un oggetto File che rappresenta il percorso che si desidera esistere e quindi chiamare .mkdirs() su di esso. Quindi assicurati di aver create il nuovo file.

final File parent = new File("someDirA/someDirB/someDirC/"); 
if (!parent.mkdirs()) 
{ 
    System.err.println("Could not create parent directories "); 
} 
final File someFile = new File(parent, "filename.txt"); 
someFile.createNewFile(); 
+0

Grazie, ma ci sono pochi bit non fatto sopra. In primo luogo, è possibile chiamare mkdirs() nelle directory esistenti e restituirà semplicemente false anziché generare un'eccezione. Inoltre, nel mio caso, una volta create le directory, posso saltare il passaggio createNewFile() e andare direttamente al passaggio FileWriter. –

+1

createNewFile() è ridondante quindi downvoting. – EJP

+2

createNewFile() è ridondante ma il resto del codice funziona correttamente. Quindi upvoting. –

Problemi correlati