Clase Java NIO Files
java.nio.file.FilesEs una clase de utilidad en el paquete Java NIO (New I/O), ubicada enjava.nio.fileel paquete.
java.nio.file.FilesProporciona una serie de métodos estáticos para operar archivos y directorios en el sistema de archivos, simplificando enormemente las operaciones de E/S de archivos.
Características principales
- Métodos estáticos: todos los métodos son estáticos, no es necesario crear una instancia
- Funciones abundantes: ofrece múltiples funciones como lectura/escritura de archivos, operaciones de atributos, recorrido de directorios, etc.
- Manejo de excepciones: utiliza de manera unificada
IOExceptionpara manejar excepciones en operaciones de archivos - Integración con Path: principalmente con la
java.nio.file.Pathinterfaz.
Clasificación de métodos comunes
Nota:Muchos métodos lanzan IOException, por lo que se debe realizar manejo de excepciones al usarlos.
A continuación se presentan los métodos comunes de la clase java.nio.file.Files:
1. Operaciones de archivo
Lectura y escritura de archivos
Ejemplo
// Lee todas las líneas del archivo
List<String> lines = Files.readAllLines(path);
// Escribe en el archivo
Files.write(path, content.getBytes());
// Escritura agregada (append)
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
List<String> lines = Files.readAllLines(path);
// Escribe en el archivo
Files.write(path, content.getBytes());
// Escritura agregada (append)
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
Copiar/Mover/Eliminar archivos
Ejemplo
// Copiar archivo
Files.copy(sourcePath, targetPath);
// Mover/Renombrar archivo
Files.move(sourcePath, targetPath);
// Eliminar archivo
Files.delete(path);
Files.copy(sourcePath, targetPath);
// Mover/Renombrar archivo
Files.move(sourcePath, targetPath);
// Eliminar archivo
Files.delete(path);
2. Operaciones de directorio
Crear directorio
Ejemplo
// Crear directorio de un solo nivel
Files.createDirectory(path);
// Crear directorios de varios niveles
Files.createDirectories(path);
Files.createDirectory(path);
// Crear directorios de varios niveles
Files.createDirectories(path);
Recorrido de directorios
Ejemplo
// Recorrer el directorio
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Recorrer el directorio recursivamente
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Recorrer el directorio recursivamente
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
3. Operaciones de atributos de archivo
Obtener atributos de archivo
Ejemplo
// Comprobar si el archivo existe
boolean exists = Files.exists(path);
// Obtener el tamaño del archivo
long size = Files.size(path);
// Obtener la fecha de última modificación del archivo
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
boolean exists = Files.exists(path);
// Obtener el tamaño del archivo
long size = Files.size(path);
// Obtener la fecha de última modificación del archivo
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
Configurar atributos de archivo
Ejemplo
// Configurar la fecha de última modificación del archivo
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Configurar permisos de archivo
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Configurar permisos de archivo
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Funciones avanzadas
1. Búsqueda de archivos
Ejemplo
// Buscar archivos con una extensión específica
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
2. Operaciones con archivos temporales
Ejemplo
// Crear archivo temporal
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Crear directorio temporal
Path tempDir = Files.createTempDirectory("tempDir");
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Crear directorio temporal
Path tempDir = Files.createTempDirectory("tempDir");
3. Vistas de atributos de archivo
Ejemplo
// Obtener el propietario del archivo
UserPrincipal owner = Files.getOwner(path);
// Obtener información de almacenamiento del archivo
FileStore store = Files.getFileStore(path);
UserPrincipal owner = Files.getOwner(path);
// Obtener información de almacenamiento del archivo
FileStore store = Files.getFileStore(path);
Mejores prácticas
1. Manejo de excepciones
Ejemplo
try {
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Error en la operación de archivo: " + e.getMessage());
}
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Error en la operación de archivo: " + e.getMessage());
}
2. Liberación de recursos
Ejemplo
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(System.out::println);
} // Cerrar el flujo automáticamente
lines.forEach(System.out::println);
} // Cerrar el flujo automáticamente
3. Consideraciones de rendimiento
- Para archivos grandes, use flujos con búfer (
Files.newBufferedReader/Files.newBufferedWriter) - Para operaciones por lotes, considere usar
Files.walken lugar de llamadas recursivas - Los atributos de acceso frecuente se pueden almacenar en caché.
Comparación con I/O tradicional
| Característica | Clase Files (NIO) | I/O tradicional (java.io) |
|---|---|---|
| Tipo de método | Métodos estáticos | Métodos de instancia |
| Representación de ruta | Usa la interfaz Path | Usa la clase File |
| Manejo de excepciones | Uso unificado de IOException | Múltiples tipos de excepción |
| Riqueza funcional | Funciones más ricas | Funciones básicas |
| Manejo de enlaces simbólicos | Soporte nativo | Soporte limitado |
| Operaciones de atributos de archivo | Más completo | Limitado |
A través de laFilesclase, Java proporciona una API de operación de archivos más moderna y potente; se recomienda usarla en nuevos proyectos en lugar de la tradicionaljava.io.Fileclase.