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 unificadaIOExceptionpara manejar excepciones en operaciones de archivos
  • Integración con Path: principalmente con lajava.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:

Método Descripción
Operaciones de archivo
static Path copy(Path source, Path target, CopyOption... options) Copia un archivo de la ruta de origen a la ruta de destino.
static Path move(Path source, Path target, CopyOption... options) Mueve o renombra un archivo.
static void delete(Path path) Elimina un archivo.
static boolean deleteIfExists(Path path) Elimina el archivo si existe.
Atributos de archivo
static boolean exists(Path path, LinkOption... options) Comprueba si el archivo existe.
static boolean isDirectory(Path path, LinkOption... options) Comprueba si la ruta es un directorio.
static boolean isRegularFile(Path path, LinkOption... options) Comprueba si la ruta es un archivo regular.
static boolean isReadable(Path path) Comprueba si el archivo es legible.
static boolean isWritable(Path path) Comprueba si el archivo es escribible.
static boolean isExecutable(Path path) Comprueba si el archivo es ejecutable.
static long size(Path path) Devuelve el tamaño del archivo (en bytes).
static FileTime getLastModifiedTime(Path path, LinkOption... options) Obtiene la fecha de última modificación del archivo.
Operaciones de contenido de archivo
static byte[] readAllBytes(Path path) Lee todos los bytes del archivo.
static List<String> readAllLines(Path path) Lee todas las líneas del archivo.
static List<String> readAllLines(Path path, Charset cs) Lee todas las líneas del archivo usando un conjunto de caracteres especificado.
static Stream<String> lines(Path path) Devuelve un flujo (stream) de líneas del archivo.
static Stream<String> lines(Path path, Charset cs) Devuelve un flujo de líneas del archivo usando un conjunto de caracteres especificado.
static Path write(Path path, byte[] bytes, OpenOption... options) Escribe bytes en un archivo.
static Path write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) Escribe líneas de texto en un archivo.
Operaciones de directorio
static Stream<Path> list(Path dir) Lista las entradas del directorio.
static DirectoryStream<Path> newDirectoryStream(Path dir) Abre un flujo de directorio.
static Path createDirectory(Path dir, FileAttribute<?>... attrs) Crea un directorio.
static Path createDirectories(Path dir, FileAttribute<?>... attrs) Crea un directorio (incluyendo todos los directorios padre que no existen).
Archivos/directorios temporales
static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) Crea un archivo temporal.
static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) Crea un directorio temporal.
Otros
static Path createFile(Path path, FileAttribute<?>... attrs) Crea un archivo nuevo.
static SeekableByteChannel newByteChannel(Path path, OpenOption... options) Abre o crea un archivo, devuelve un canal de bytes que admite búsqueda (seekable).
static InputStream newInputStream(Path path, OpenOption... options) Abre un flujo de entrada de archivo.
static OutputStream newOutputStream(Path path, OpenOption... options) Abre un flujo de salida de archivo.
static BufferedReader newBufferedReader(Path path) Abre un lector con buffer.
static BufferedWriter newBufferedWriter(Path path, OpenOption... options) Abre un escritor con buffer.
static String probeContentType(Path path) Detecta el tipo de contenido del archivo.

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);

Copiar/Mover/Eliminar archivos

Ejemplo

// Copiar archivo
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);

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);
}

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);

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);

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);
}

2. Operaciones con archivos temporales

Ejemplo

// Crear archivo temporal
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);

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());
}

2. Liberación de recursos

Ejemplo

try (Stream<String> lines = Files.lines(path)) {
    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 usarFiles.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.

Otras extensiones