Saltar al contenido
CodigoDev

10 Ejercicios resueltos de Archivos y Directorios en Java

Java Intermedio
Ejercicios resueltos de Archivos y Directorios en Java
lightbulb Introducción al ejercicio

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.

menu_book

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

help_outline Problema:

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.

code Solución explicada:
java
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)

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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().

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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

help_outline Problema:

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\").

code Solución explicada:
java
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

help_outline Problema:

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.

code Solución explicada:
java
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.
help

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.

task_alt

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!

rocket_launch

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.

A
Autor del artículo

Alejandro Nes

calendar_today update Actualizado

Desarrollador de Software y creador de contenido educativo

hardware

Herramientas recomendadas para practicar

Java

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.

Otros ejercicios prácticos recomendados

Ver todos arrow_forward