El paquete java.io no tiene una clase Directory
, pero se puede utilizar el método de la clase mkdir()
File
lugar:
(new File("Foo")).mkdir()
Tenga en cuenta que mkdir()
tiene dos modos de fallo independientes:
- "Si existe un administrador de seguridad y su método
checkWrite()
no permite que se cree el directorio nombrado" se lanzará un SecurityException
.
- Si la operación falla por otro motivo,
mkdir()
devolverá falso. (Más específicamente, se devolverá verdadero si y sólo si se creó el directorio.)
punto 1 está bien - si no tiene permiso, a tiro. El punto 2 es un poco subóptimo por tres razones:
- Debe inspeccionar el resultado booleano de este método. Si ignora el resultado, la operación podría fallar silenciosamente.
- Si obtiene un retorno falso, no tiene idea de por qué falló la operación, lo que dificulta su recuperación, o formula un mensaje de error significativo.
- La terminología estricta de "si y solo si" del contrato también significa que el método devuelve falso si el directorio ya existe.
Aparte: Contraste El punto 3 con el comportamiento de la .NET Directory.CreateDirectory()
cuales no hace nada si el directorio existe. Este tipo de sentido tiene sentido: "crear un directorio "; "ok, el directorio es creado". ¿Importa si fue creado ahora o antes; por este proceso u otro? Si realmente te importaba , ¿no estarías haciendo una pregunta diferente : "¿Existe este directorio?"
La siguiente advertencia es que mkdir()
no creará más de un directorio a la vez. Para mi ejemplo simple de un directorio llamado "Foo", está bien; sin embargo, si desea crear un directorio llamado Bar dentro del directorio Foo (es decir, para crear el directorio "Foo/Bar"), debe recordar utilizar el método mkdirs()
.
Así que para evitar todas estas advertencias, se puede emplear un método de ayuda tales como los siguientes:
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.");
}
¿Hizo una pregunta e inmediatamente publicó su propia respuesta? – KLE
-1. Parece muy extraño publicar una pregunta y una respuesta. Stack Overflow no es un micrófono para dar conferencias. –
+1. Está bien publicar tu propia pregunta y respuesta. Ayuda a la comunidad y útil para referencia futura. Si las personas no están de acuerdo con su respuesta, entonces pueden proporcionar una mejor. Una búsqueda * rápida * en Meta SO parece estar de acuerdo en que esto está bien. – Iain