Il pacchetto java.io non ha una classe Directory
, ma è possibile utilizzare il metodo mkdir()
sulla classe File
invece:
(new File("Foo")).mkdir()
Nota che mkdir()
ha due distinte modalità di guasto:
- "Se esiste un gestore di sicurezza e il suo metodo
checkWrite()
non consente la creazione della directory denominata", verrà generato un valore SecurityException
.
- Se l'operazione non riesce per un altro motivo,
mkdir()
restituirà false. (Più precisamente, si restituirà vero se e solo se è stata creata la directory.)
punto 1 è ok - se non si dispone dell'autorizzazione, buttare. Il punto 2 è un po 'non ottimale per tre ragioni:
- È necessario controllare il risultato booleano da questo metodo. Se ignori il risultato, l'operazione potrebbe fallire silenziosamente.
- Se si ottiene un ritorno falso non si ha idea del perché l'operazione abbia avuto esito negativo, il che rende difficile il ripristino o la formulazione di un messaggio di errore significativo.
- La rigida dicitura "se e solo se" del contratto indica anche che il metodo restituisce false se la directory esiste già.
parte: Contrasto punto 3 con il comportamento del .NET Directory.CreateDirectory()
che non fa nulla se la directory esiste. Questo tipo di ha senso - "creare una directory "; "ok, la directory è creata". Importa se era creato ora o prima; da questo processo o un altro? Se davvero ti preoccupi di quello , non ti chiederebbe una diversa domanda : "Esiste questa directory?"
L'avvertenza successiva è che mkdir()
non creerà più di una directory alla volta. Per il mio semplice esempio di una directory chiamata "Foo" questo va bene; tuttavia, se si desidera creare una directory denominata Barra all'interno della directory Foo (ad esempio, per creare la directory "Foo/Bar") è necessario ricordare di utilizzare invece il metodo mkdirs()
.
Quindi, per aggirare tutti questi avvertimenti, è possibile utilizzare un metodo di supporto come la seguente:
public static File createDirectory(String directoryPath) throws IOException {
File dir = new File(directoryPath);
if (dir.exists()) {
return dir;
}
if (dir.mkdirs()) {
return dir;
}
throw new IOException("Failed to create directory '" + dir.getAbsolutePath() + "' for an unknown reason.");
}
fonte
2009-10-12 12:22:28
Hai fatto una domanda e hai immediatamente pubblicato la tua risposta? – KLE
-1. Sembra molto strano pubblicare una domanda e una risposta. Stack Overflow non è un microfono da cui tenere lezioni. –
+1. Va bene pubblicare la tua domanda e risposta. Aiuta la comunità e utile per riferimenti futuri. Se le persone non sono d'accordo con la tua risposta, possono fornirne una migliore. Una ricerca * rapida * su Meta SO sembra essere d'accordo sul fatto che questo va bene. – Iain