Operaciones básicas de I/O
Table of Contents
Acceso a archivos
Usaremos la interfaz Path del paquete java.nio.file para localizar un archivo en el sistema de archivos. Este Path representa una ruta a un archivo.
La manera más sencilla de crear un Path sería usar el factory method of de la interfaz Path:
Path rutaRelativa = Path.of("datos.txt");
Path rutaAbsoluta = Path.of("/home/usuario/documentos/datos.txt");
Operaciones fundamentales
La clase Files del paquete java.nio.file proporciona los métodos necesarios para interactuar de forma real con el sistema de archivos.
Gestión de Excepciones
Casi todos los métodos de la clase Files realizan acceso directo a disco y, por tanto, pueden lanzar la excepción comprobada java.io.IOException. Esto nos obliga a capturar la excepción mediante bloques try-catch o declararla en la firma del método con throws IOException.
Comprobar existencia y propiedades
Antes de operar sobre un archivo o directorio, es fundamental comprobar su estado.
import java.nio.file.Files;
import java.nio.file.Path;
Path ruta = Path.of("config/app.conf");
// Comprobaciones de existencia
boolean existe = Files.exists(ruta);
boolean noExiste = Files.notExists(ruta);
if (existe) {
// Identificar el tipo de elemento
boolean esFichero = Files.isRegularFile(ruta);
boolean esDirectorio = Files.isDirectory(ruta);
// Comprobar permisos
boolean sePuedeLeer = Files.isReadable(ruta);
boolean sePuedeEscribir = Files.isWritable(ruta);
System.out.println("Es fichero regular: " + esFichero);
System.out.println("Permiso de lectura: " + sePuedeLeer);
}
Crear archivos y directorios
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
Path carpeta = Path.of("datos");
Path archivo = Path.of("datos/notas.txt");
try {
// Crear un directorio si no existe
if (Files.notExists(carpeta)) {
// Falla si las carpetas padre no existen
Files.createDirectory(carpeta);
}
// Crear un fichero vacío si no existe
if (Files.notExists(archivo)) {
Files.createFile(archivo);
System.out.println("Fichero creado correctamente.");
}
} catch (IOException e) {
System.err.println("Ocurrió un error al crear los elementos: " + e.getMessage());
}
Si necesitas crear una estructura de carpetas anidadas donde los directorios intermedios aún no existen (por ejemplo: datos/2026/informes), debes utilizar el método Files.createDirectories(ruta) en lugar de createDirectory.
Copiar, mover y borrar de archivos
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
Path origen = Path.of("notas.txt");
Path destinoCopia = Path.of("backup_notas.txt");
Path destinoMover = Path.of("historico/notas_v1.txt");
try {
// Copiar sobreescribiendo si el destino ya existe
Files.copy(origen, destinoCopia, StandardCopyOption.REPLACE_EXISTING);
// Mover o renombrar
Files.move(origen, destinoMover, StandardCopyOption.REPLACE_EXISTING);
// Borrado de archivos
// Lanza NoSuchFileException si el archivo no existe
Files.delete(destinoCopia);
// Forma alternativa y más segura de borrar:
// Retorna boolean, no lanza excepción si no existe
boolean borrado = Files.deleteIfExists(Path.of("temp.tmp"));
} catch (IOException e) {
System.err.println("Error durante la operación de archivos: " + e.getMessage());
}