Trabajo con el sistema de archivos en Java: de File a NIO
Trabajar con el sistema de archivos es una de las tareas fundamentales en el desarrollo en Java. Ya sea para leer configuraciones, escribir registros o procesar datos de usuario, saber cómo interactuar correctamente con archivos y directorios es necesario para todo desarrollador Java. En este artículo, analizaremos en detalle las clases y enfoques principales para trabajar con el sistema de archivos, comenzando con el clásico java.io.File y terminando con el moderno java.nio.file.
Clase File: conceptos básicos de trabajo con archivos y carpetas
La clase java.io.File existe en Java desde la primera versión y proporciona capacidades básicas para trabajar con rutas, archivos y directorios. No lee ni escribe datos directamente, pero permite realizar operaciones de gestión del sistema de archivos.
Creación de un objeto File y verificación de existencia:
import java.io.File;
public class FileExample { public static void main(String[] args) { File file = new File("example.txt"); File dir = new File("myFolder");
System.out.println("El archivo existe: " + file.exists()); System.out.println("Es un directorio: " + dir.isDirectory()); }}Creación de archivos y directorios:
File newFile = new File("newFile.txt");if (newFile.createNewFile()) { System.out.println("Archivo creado: " + newFile.getName());} else { System.out.println("El archivo ya existe");}
File newDir = new File("newDirectory");if (newDir.mkdir()) { System.out.println("Carpeta creada");}
// Crear directorios anidadosFile nestedDir = new File("parent/child/grandchild");if (nestedDir.mkdirs()) { System.out.println("Carpetas anidadas creadas");}Obtención de información sobre el archivo:
File infoFile = new File("example.txt");System.out.println("Ruta absoluta: " + infoFile.getAbsolutePath());System.out.println("Tamaño: " + infoFile.length() + " bytes");System.out.println("Última modificación: " + infoFile.lastModified());System.out.println("Carpeta padre: " + infoFile.getParent());Eliminación y renombrado:
File fileToDelete = new File("temp.txt");if (fileToDelete.delete()) { System.out.println("Archivo eliminado");}
File oldFile = new File("old.txt");File newFile = new File("new.txt");if (oldFile.renameTo(newFile)) { System.out.println("Archivo renombrado");}Lectura y escritura de archivos: flujos clásicos de entrada y salida
Para la lectura y escritura directa de datos se utilizan flujos de entrada y salida (I/O streams). Las clases principales son: FileInputStream, FileOutputStream para datos binarios y FileReader, FileWriter para datos de texto.
Escritura de texto en un archivo con FileWriter:
import java.io.FileWriter;import java.io.IOException;
public class WriteExample { public static void main(String[] args) { try (FileWriter writer = new FileWriter("output.txt")) { writer.write("¡Hola, mundo!"); writer.write("Esta es la segunda línea."); System.out.println("Escritura realizada con éxito"); } catch (IOException e) { System.err.println("Error de escritura: " + e.getMessage()); } }}Lectura de texto desde un archivo con FileReader y BufferedReader:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
public class ReadExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);