10 Ejercicios resueltos de Archivos y Directorios en Java
Aprende a gestionar archivos y directorios en Java con estos 10 ejercicios resueltos. Descubre cómo crear, leer, escribir y organizar carpetas paso a paso. Práctica ideal para afianzar tus conocimientos intermedios y aplicar soluciones efectivas en tus proyectos de software.
Aprendizaje teórico
Archivos y Directorios en Java
En cualquier aplicación del mundo real, la información debe guardarse permanentemente. Aquí es donde entran los archivos y directorios. En Java, contamos con la clásica clase File (java.io) y la moderna API NIO.2 (java.nio.file), que incluye clases más potentes como Path y Files.
¿Para qué sirven?
Te permiten interactuar con el sistema operativo para crear documentos de texto, organizar carpetas, modificar configuraciones o eliminar datos temporales.
¿Cómo funcionan?
Un objeto File actúa como un «puntero» o representación de la ruta en tu disco duro, pero no crea el archivo físicamente por sí solo. Para leer o escribir contenido real, utilizamos clases auxiliares como FileWriter, Scanner, o los métodos estáticos de Files.
Ejemplo breve: instanciar File miArchivo = new File("datos.txt"); solo define la ruta. Luego, mediante un método como createNewFile(), puedes ordenarle al sistema operativo que realmente construya el documento en el disco.
Ejercicio 1: Crear un archivo de texto en blanco
Escribe un programa que cree un archivo de texto llamado «mensaje.txt» en la carpeta actual del proyecto. Si el archivo se crea con éxito, muestra un mensaje confirmándolo; si el archivo ya existe, avisa al usuario.
Pista
Instancia un objeto de la clase File con el nombre deseado y utiliza el método createNewFile(). Recuerda atrapar la excepción IOException.
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File archivo = new File("mensaje.txt");
try {
if (archivo.createNewFile()) {
System.out.println("El archivo ha sido creado: " + archivo.getName());
} else {
System.out.println("El archivo ya existe en el directorio.");
}
} catch (IOException e) {
System.out.println("Ocurrió un error al intentar crear el archivo.");
e.printStackTrace();
}
}
}
terminal Resultado esperado:
El archivo ha sido creado: mensaje.txt
Ejercicio 2: Creación de un nuevo directorio (carpeta)
Crea un programa que genere una nueva carpeta llamada «Archivos_Proyecto». Comprueba el resultado y muestra un mensaje de éxito o indica si la carpeta ya estaba creada previamente.
Pista
A diferencia de los archivos, para crear un directorio debes utilizar el método mkdir() (make directory) sobre tu objeto File.
import java.io.File;
public class Main {
public static void main(String[] args) {
File carpeta = new File("Archivos_Proyecto");
// mkdir() devuelve true si la carpeta se crea exitosamente
if (carpeta.mkdir()) {
System.out.println("Directorio creado exitosamente.");
} else {
System.out.println("El directorio ya existe o no se pudo crear.");
}
}
}
terminal Resultado esperado:
Directorio creado exitosamente.
Ejercicio 3: Escribir texto dentro de un archivo
Abre el archivo «mensaje.txt» creado en el primer ejercicio y escribe dentro de él la frase «¡Hola, mundo de los archivos en Java!». Avisa al usuario cuando la escritura termine.
Pista
Utiliza la clase FileWriter. Escribe tu contenido usando el método write() y asegúrate de cerrar el archivo al final con close() para guardar los cambios.
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
FileWriter escritor = new FileWriter("mensaje.txt");
escritor.write("¡Hola, mundo de los archivos en Java!");
escritor.close(); // Muy importante cerrar para liberar el recurso
System.out.println("Se ha escrito en el archivo correctamente.");
} catch (IOException e) {
System.out.println("Ocurrió un error de escritura.");
e.printStackTrace();
}
}
}
terminal Resultado esperado:
Se ha escrito en el archivo correctamente.
Ejercicio 4: Leer contenido de un archivo de texto
Crea un programa que lea el contenido del archivo «mensaje.txt» y lo imprima en la consola. Si el archivo no existe, debe manejarse el error adecuadamente.
Pista
Utiliza la clase Scanner pasándole como parámetro el objeto File. Usa un bucle while con hasNextLine() para leer todas las líneas del documento.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File archivo = new File("mensaje.txt");
Scanner lector = new Scanner(archivo);
System.out.println("Contenido del archivo:");
while (lector.hasNextLine()) {
String linea = lector.nextLine();
System.out.println(linea);
}
lector.close();
} catch (FileNotFoundException e) {
System.out.println("No se pudo encontrar el archivo especificado.");
e.printStackTrace();
}
}
}
terminal Resultado esperado:
Contenido del archivo: ¡Hola, mundo de los archivos en Java!
Ejercicio 5: Obtener información y propiedades
Escribe un programa que consulte si el archivo «mensaje.txt» existe. Si es así, imprime su nombre exacto, su ruta absoluta (ubicación completa) y su tamaño en bytes.
Pista
La clase File cuenta con métodos informativos útiles como exists(), getName(), getAbsolutePath() y length().
import java.io.File;
public class Main {
public static void main(String[] args) {
File archivo = new File("mensaje.txt");
if (archivo.exists()) {
System.out.println("Nombre: " + archivo.getName());
System.out.println("Ruta absoluta: " + archivo.getAbsolutePath());
System.out.println("Es escribible: " + archivo.canWrite());
System.out.println("Es leíble: " + archivo.canRead());
System.out.println("Tamaño: " + archivo.length() + " bytes");
} else {
System.out.println("El archivo no existe.");
}
}
}
terminal Resultado esperado:
Nombre: mensaje.txt Ruta absoluta: C:\Proyectos\Java\mensaje.txt Es escribible: true Es leíble: true Tamaño: 37 bytes
Ejercicio 6: Añadir texto sin borrar el contenido anterior
Modifica el archivo «mensaje.txt». Esta vez, agrega una nueva línea que diga «Esta es una segunda línea agregada.» respetando el texto original que escribimos en el Ejercicio 3.
Pista
Al crear el FileWriter, pásale un segundo parámetro true. Esto activa el modo «append» (añadir) en lugar del modo sobrescritura. Usa \n para el salto de línea.
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// El parámetro 'true' indica que queremos añadir al final del archivo
FileWriter escritor = new FileWriter("mensaje.txt", true);
escritor.write("\nEsta es una segunda línea agregada.");
escritor.close();
System.out.println("Texto añadido correctamente sin borrar el original.");
} catch (IOException e) {
System.out.println("Error al intentar modificar el archivo.");
}
}
}
terminal Resultado esperado:
Texto añadido correctamente sin borrar el original.
Ejercicio 7: Listar el contenido de un directorio
Desarrolla un programa que lea la carpeta actual del proyecto (.) y muestre en consola una lista con los nombres de todos los archivos y carpetas que contiene.
Pista
Instancia un objeto File con la ruta «.». Luego, utiliza el método list() o listFiles() para obtener un arreglo con el contenido del directorio y recórrelo con un bucle.
import java.io.File;
public class Main {
public static void main(String[] args) {
// El punto representa el directorio actual de trabajo
File directorioActual = new File(".");
String[] listaElementos = directorioActual.list();
System.out.println("Contenido del directorio actual:");
if (listaElementos != null) {
for (String nombre : listaElementos) {
System.out.println("- " + nombre);
}
} else {
System.out.println("No se pudo leer el directorio.");
}
}
}
terminal Resultado esperado:
Contenido del directorio actual: - .idea - Archivos_Proyecto - Main.java - mensaje.txt - out
Ejercicio 8: Renombrar o mover un archivo
Toma el archivo «mensaje.txt» y renómbralo a «mensaje_guardado.txt». Avisa al usuario si el cambio de nombre se realizó con éxito.
Pista
Utiliza el método renameTo() del objeto File original, pasándole por parámetro un nuevo objeto File que contenga el nombre deseado.
import java.io.File;
public class Main {
public static void main(String[] args) {
File archivoOriginal = new File("mensaje.txt");
File archivoNuevo = new File("mensaje_guardado.txt");
// renameTo cambia el nombre (o la ruta si se especifica otra carpeta)
boolean exito = archivoOriginal.renameTo(archivoNuevo);
if (exito) {
System.out.println("El archivo fue renombrado con éxito.");
} else {
System.out.println("Hubo un problema al renombrar el archivo. Quizá no exista.");
}
}
}
terminal Resultado esperado:
El archivo fue renombrado con éxito.
Ejercicio 9: Copiar archivos de forma eficiente con NIO.2
Haz una copia exacta del archivo «mensaje_guardado.txt» y llámala «copia_seguridad.txt». Esta vez, en lugar de usar File, utiliza la moderna librería java.nio.file.Files.
Pista
Utiliza el método estático Files.copy(). Necesitarás convertir las rutas de texto a objetos Path utilizando Paths.get(\"nombre_archivo\").
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
Path origen = Paths.get("mensaje_guardado.txt");
Path destino = Paths.get("copia_seguridad.txt");
try {
// Realiza la copia del archivo directamente
Files.copy(origen, destino);
System.out.println("Copia de seguridad creada correctamente usando NIO.");
} catch (IOException e) {
System.out.println("Error al copiar. Puede que el archivo de destino ya exista.");
}
}
}
terminal Resultado esperado:
Copia de seguridad creada correctamente usando NIO.
Ejercicio 10: Eliminar archivos y limpiar el entorno
Para dejar el sistema limpio, escribe un programa que elimine la carpeta «Archivos_Proyecto» (creada en el Ejercicio 2) y el archivo «copia_seguridad.txt» (creado en el Ejercicio 9). Muestra confirmación de cada borrado.
Pista
Utiliza el método delete() sobre las instancias de File. Recuerda que para borrar un directorio en Java mediante este método estándar, la carpeta debe estar vacía.
import java.io.File;
public class Main {
public static void main(String[] args) {
File carpeta = new File("Archivos_Proyecto");
File archivoCopia = new File("copia_seguridad.txt");
if (carpeta.delete()) {
System.out.println("La carpeta 'Archivos_Proyecto' fue eliminada.");
} else {
System.out.println("No se pudo eliminar la carpeta.");
}
if (archivoCopia.delete()) {
System.out.println("El archivo 'copia_seguridad.txt' fue eliminado.");
} else {
System.out.println("No se pudo eliminar el archivo de copia.");
}
}
}
terminal Resultado esperado:
La carpeta 'Archivos_Proyecto' fue eliminada. El archivo 'copia_seguridad.txt' fue eliminado.
Preguntas frecuentes
¿Cuál es la diferencia entre java.io y java.nio?
java.io es la librería clásica basada en flujos de datos. java.nio (New I/O), introducida después, es más eficiente, funciona mejor con operaciones asíncronas y maneja las rutas de disco duro de forma más sofisticada mediante la clase Path.
¿Por qué necesito usar try-catch al trabajar con archivos?
Porque interactuar con el disco duro es riesgoso: un archivo puede no existir, el disco puede estar lleno o podrías carecer de permisos. Java te obliga a atrapar estas posibles excepciones (IOException) para evitar que tu aplicación colapse.
¿Qué pasa si escribo en un archivo que ya contiene texto?
Si usas FileWriter de forma normal, Java sobrescribirá todo el contenido existente perdiendo los datos. Para conservar el texto anterior y agregar nuevo contenido, debes instanciar el escritor en modo «append» pasando true como segundo parámetro.
Conclusión
Manejar archivos y directorios en Java es una habilidad esencial que te permitirá crear aplicaciones útiles con datos persistentes. Como vimos en los ejercicios resueltos, desde operaciones simples como crear un texto hasta copiar elementos y gestionar carpetas, Java ofrece herramientas robustas a través de java.io y java.nio. Te recomiendo experimentar con estas soluciones, modificar las rutas y combinar los ejercicios para crear proyectos pequeños, como un bloc de notas o un automatizador de copias de seguridad. ¡La práctica constante es la clave para dominar este nivel intermedio!
Sigue aprendiendo
Documentación oficial de Oracle sobre operaciones de Entrada/Salida clásicas en Java (I/O Streams).
Guía completa sobre el paquete moderno NIO.2 para el manejo avanzado de rutas, archivos y directorios.
Herramientas recomendadas para practicar
Java es un lenguaje de programación orientado a objetos, tipado y multiplataforma, respaldado por la JVM. Su principio de «escribe una vez, ejecuta en cualquier lugar» lo hace útil para sistemas empresariales, microservicios en la nube, escritorio y Android.
Sigue practicando
Otros ejercicios prácticos recomendados
10 Ejercicios resueltos de Genéricos y Colecciones en Java
Aprende a dominar los genéricos y las colecciones en Java con esta guía práctica. Descubre cómo crear código más seguro, flexible y reutilizable a través de 10 ejercicios resueltos paso a paso, ideales para afianzar tus...
10 Ejercicios resueltos de Manejo de Excepciones en Java
Descubre cómo crear programas a prueba de fallos con estos 10 ejercicios resueltos de manejo de excepciones en Java. Aprenderás a usar try-catch, prever errores comunes y construir aplicaciones estables y profesionales....
10 Ejercicios resueltos de ArrayList y HashMap en Java
Aprende a gestionar colecciones de datos dinámicas con estos 10 ejercicios resueltos de ArrayList y HashMap en Java. Mejora tu lógica de programación, organiza la información eficientemente y domina el nivel intermedio c...