TutorJava Nivel Básico: tutorial completo Java 21

Trabajar con ficheros en Java ha evolucionado mucho desde las primeras versiones. La API NIO.2 (java.nio.file), disponible desde Java 7, reemplaza al antiguo java.io.File y ofrece una interfaz mucho más expresiva y robusta.

Path y Files: la base de NIO.2

Path representa una ruta en el sistema de ficheros. Files proporciona operaciones estáticas sobre esa ruta:

import java.nio.file.*;
import java.io.IOException;

// Crear paths
Path ruta = Path.of("datos/fichero.txt");           // relativo
Path absoluto = Path.of("/home/usuario/fichero.txt"); // absoluto
Path unido = Path.of("datos").resolve("fichero.txt"); // combinar partes

// Información
System.out.println(ruta.getFileName());  // fichero.txt
System.out.println(ruta.getParent());    // datos
System.out.println(Files.exists(ruta));  // true/false
System.out.println(Files.isDirectory(ruta));
System.out.println(Files.size(ruta));    // bytes

Leer y escribir ficheros

Path path = Path.of("saludo.txt");

// Escribir texto
Files.writeString(path, "Hola, Java 21\n");

// Añadir al final
Files.writeString(path, "Segunda línea\n", StandardOpenOption.APPEND);

// Leer todo el contenido
String contenido = Files.readString(path);
System.out.println(contenido);

// Leer línea a línea
List lineas = Files.readAllLines(path);
for (String linea : lineas) {
    System.out.println(linea);
}

// Ficheros grandes: leer como stream (no carga todo en memoria)
try (Stream stream = Files.lines(path)) {
    long conJava = stream.filter(l -> l.contains("Java")).count();
    System.out.println("Líneas con 'Java': " + conJava);
}

Crear, copiar, mover y borrar

// Crear directorios
Files.createDirectory(Path.of("nuevoDir"));
Files.createDirectories(Path.of("a/b/c")); // crea toda la cadena

// Copiar
Files.copy(Path.of("origen.txt"), Path.of("destino.txt"),
           StandardCopyOption.REPLACE_EXISTING);

// Mover / renombrar
Files.move(Path.of("viejo.txt"), Path.of("nuevo.txt"),
           StandardCopyOption.REPLACE_EXISTING);

// Borrar
Files.delete(Path.of("fichero.txt"));
Files.deleteIfExists(Path.of("quizas.txt")); // no lanza excepción si no existe

// Listar contenido de un directorio
try (DirectoryStream dir = Files.newDirectoryStream(Path.of("."))) {
    for (Path entrada : dir) {
        System.out.println(entrada.getFileName());
    }
}

Ficheros temporales y propiedades

// Crear fichero temporal (se borra al salir si se usa con deleteOnExit)
Path temp = Files.createTempFile("prefijo_", ".tmp");
Files.writeString(temp, "datos temporales");
// ... usar el fichero ...
Files.delete(temp);  // limpieza manual

// Atributos básicos
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println("Creado: " + attrs.creationTime());
System.out.println("Modificado: " + attrs.lastModifiedTime());
System.out.println("Es directorio: " + attrs.isDirectory());

Serialización moderna: Jackson / Gson

La serialización Java clásica (Serializable) tiene problemas de seguridad y compatibilidad. Para guardar objetos en disco o transmitir por red, el enfoque moderno es JSON o XML con librerías:

// Con Jackson (añadir dependencia en pom.xml o build.gradle)
// Objeto a JSON
ObjectMapper mapper = new ObjectMapper();
Persona persona = new Persona("Ana", 30);
String json = mapper.writeValueAsString(persona);  // {"nombre":"Ana","edad":30}
Files.writeString(Path.of("persona.json"), json);

// JSON a objeto
String jsonLeido = Files.readString(Path.of("persona.json"));
Persona cargada = mapper.readValue(jsonLeido, Persona.class);

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP