HOWTO · Java
Crear directorio en Java
Este tutorial explica cómo crear un directorio en Java
En esta página
Un directorio es una estructura del sistema de archivos para organizar y almacenar archivos, y crear uno es una tarea habitual de gestión de archivos en Java. El JDK ofrece dos API para ello —los métodos heredados de java.io.File y los ayudantes más recientes de java.nio.file.Files—, y Apache Commons IO añade una tercera opción. Este tutorial muestra cada enfoque y las diferencias de comportamiento que importan al elegir uno.
Elija un método para crear directorios en Java
En la mayoría del código nuevo, prefiera java.nio.file.Files. Llame a Files.createDirectories(path) cuando algunos directorios padre aún no existan: crea toda la ruta en una sola llamada y no falla solo porque el directorio ya esté ahí. En cambio, llame a Files.createDirectory(path) cuando un destino existente deba tratarse como un fallo. Los métodos más antiguos File.mkdir() y File.mkdirs() solo informan del éxito mediante un boolean, que es fácil de ignorar, mientras que los métodos Files lanzan excepciones comprobadas que nombran el problema exacto. FileUtils.forceMkdir() es una opción razonable únicamente en bases de código que ya dependen de Apache Commons IO.
Las diferencias importantes son cómo gestiona cada método los directorios padre ausentes y un destino ya existente:
| Método | Padres ausentes | Directorio de destino existente | Señal de fallo |
|---|---|---|---|
File.mkdir() |
falla y devuelve false |
devuelve false |
valor de retorno boolean |
File.mkdirs() |
los crea | devuelve false |
valor de retorno boolean |
Files.createDirectory() |
NoSuchFileException |
FileAlreadyExistsException |
subtipos comprobados de IOException |
Files.createDirectories() |
los crea | retorna con normalidad | subtipos comprobados de IOException |
FileUtils.forceMkdir() |
los crea | retorna con normalidad | IOException |
Cree un directorio con File.mkdir()
File.mkdir() crea exactamente un directorio en la ruta representada por la instancia de File. Solo devuelve true cuando realmente creó el directorio; devuelve false cuando el nombre ya está ocupado, cuando el directorio padre no existe o cuando el sistema operativo deniega la solicitud, por lo que siempre debe comprobar el valor de retorno en lugar de suponer que la operación tuvo éxito.
El siguiente programa crea un directorio llamado reports en el directorio de trabajo e imprime el resultado; los mensajes de la salida se conservan en inglés:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import java.io.File;
public class MkdirExample {
public static void main(String[] args) {
File dir = new File("reports");
boolean created = dir.mkdir();
System.out.println("mkdir() returned: " + created);
System.out.println("Directory exists: " + dir.isDirectory());
}
}
mkdir() returned: true
Directory exists: true
Un resultado false no indica la causa: compruebe dir.isDirectory() después cuando un directorio preexistente sea aceptable, o cambie a Files.createDirectory() para obtener fallos diferenciados por tipo. mkdir() también puede lanzar la excepción no comprobada SecurityException cuando un gestor de seguridad deniega el acceso de escritura.
Cree un árbol de directorios con File.mkdirs()
File.mkdirs() crea el directorio de destino y todos los padres ausentes a lo largo de la ruta en una sola llamada. El ejemplo imprime el resultado y conserva los mensajes de la salida en inglés:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import java.io.File;
public class MkdirsExample {
public static void main(String[] args) {
File dir = new File("reports/2026/october");
boolean created = dir.mkdirs();
System.out.println("mkdirs() returned: " + created);
System.out.println("Directory exists: " + dir.isDirectory());
}
}
mkdirs() returned: true
Directory exists: true
Tenga en cuenta que mkdirs() solo devuelve true cuando creó el directorio junto con todos los padres necesarios. Si se ejecuta sobre un árbol existente, devuelve false aunque no haya ocurrido ningún error, y un resultado false no indica qué nivel falló. Verifique con isDirectory() cuando el éxito consista simplemente en que el directorio esté ahí.
Cree un directorio con Files.createDirectory()
Files.createDirectory(path) es el equivalente NIO de mkdir(): crea exactamente un directorio y falla cuando el padre no existe. Como sus fallos son excepciones comprobadas, el compilador le obliga a tratarlas, y el tipo de excepción identifica el problema: FileAlreadyExistsException cuando el nombre está ocupado y NoSuchFileException cuando falta el padre. El siguiente ejemplo muestra este manejo y conserva los mensajes de la salida en inglés:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateDirectoryExample {
public static void main(String[] args) {
Path path = Paths.get("logs");
try {
Files.createDirectory(path);
System.out.println("Created directory: " + path);
} catch (FileAlreadyExistsException e) {
System.out.println("Already exists: " + path);
} catch (IOException e) {
System.out.println("Could not create directory: " + e);
}
}
}
Created directory: logs
Capturar FileAlreadyExistsException por separado permite tratar sin ruido el caso habitual de «ya existe», mientras que otros subtipos de IOException siguen manifestándose como fallos.
Cree un árbol de directorios con Files.createDirectories()
Files.createDirectories(path) crea el destino y todos los padres ausentes en una sola llamada y, a diferencia de mkdirs(), retorna con normalidad cuando el directorio ya existe; es la llamada recomendada cuando solo necesita que la ruta esté ahí. Aun así, lanza FileAlreadyExistsException cuando un archivo normal ocupa la ruta y otros subtipos de IOException en fallos reales, como permisos denegados. El ejemplo confirma la ruta creada y conserva el mensaje de la salida en inglés:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateDirectoriesExample {
public static void main(String[] args) {
Path path = Paths.get("data/archive/2026");
try {
Files.createDirectories(path);
System.out.println("Directory ready: " + path);
} catch (IOException e) {
System.out.println("Could not create directory: " + e);
}
}
}
Directory ready: data/archive/2026
Use FileUtils.forceMkdir() de Apache Commons IO
FileUtils.forceMkdir() no forma parte del JDK; reside en Apache Commons IO, por lo que el proyecto necesita la dependencia commons-io (por ejemplo, el artefacto commons-io:commons-io en Maven o Gradle). Como la biblioteca no está en el classpath estándar, la llamada se muestra en línea en lugar de hacerlo como un ejemplo ejecutable:
FileUtils.forceMkdir(new File("data/archive/2026"));
Al igual que createDirectories(), crea el directorio más los padres ausentes y retorna silenciosamente cuando el directorio ya existe; a pesar del nombre, «force» se refiere a crear los padres necesarios, no a sobrescribir nada. Lanza IOException cuando un archivo que no es un directorio ocupa la ruta o cuando no se puede crear el directorio. Prefiera los métodos estándar de Files a menos que la base de código ya use Commons IO.