2010-06-22 14 views

risposta

102

Hai provato questo?

file.getParentFile().mkdirs(); 
file.createNewFile(); 

Non so di una singola chiamata di metodoche farà questo, ma è abbastanza facile con due prospetti.

+0

Questo funziona solo se il file è stato creato con una stringa di percorso che contiene un genitore directory, cioè 'new File (" file.txt "). getParentFile()' restituisce 'null',' new File ("dir/file.txt"). getParentFile() 'restituisce lo stesso di' new File ("dir ")' –

+0

Vero, non hai bisogno di 'mkdirs' se il file che stai cercando di creare non si trova in una directory inesistente, ma il mio caso d'uso è che sto creando più file, _qualcuno dei quali ha directory madri, mentre altri no. –

7

La risposta di Jon funziona se si è certi che la stringa di percorso con cui si sta creando un file include le directory padre, ad esempio se si è certi che il percorso sia del formato <parent-dir>/<file-name>.

In caso contrario, vale a dire un percorso relativo del modulo <file-name>, quindi getParentFile() restituirà null.

E.g.

File f = new File("dir/text.txt"); 
f.getParentFile().mkdirs();  // works fine because the path includes a parent directory. 

File f = new File("text.txt"); 
f.getParentFile().mkdirs();  // throws NullPointerException because the parent file is unknown, i.e. `null`. 

Così, se il percorso del file può o non può includere directory padre, si sono più sicuri con il seguente codice:

File f = new File(filename); 
if (f.getParentFile() != null) { 
    f.getParentFile().mkdirs(); 
} 
f.createNewFile(); 
+0

per molte ragioni dovresti sempre includere un percorso. In quale altro modo il sistema dovrebbe sapere dove vuoi mettere quel file? – NikkyD

+0

@NikkyD Mi dispiace, non capisco il tuo commento. Nella mia risposta, non sto dicendo che non includi un percorso, ma che il percorso passato potrebbe non includere _parent directories_. C'è anche un esempio per un tale percorso nella risposta. –

Problemi correlati