Fusionar múltiples archivos alternativamente

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a fusionar múltiples archivos de texto línea por línea de manera alternada. Esta es una tarea común en el procesamiento de datos y la gestión de archivos, donde es posible que necesites combinar el contenido de varios archivos en un solo archivo.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo preparar los archivos de entrada necesarios para el proceso de fusión de archivos
  • Cómo implementar una función para fusionar el contenido de los archivos de entrada
  • Cómo ejecutar el proceso de fusión de archivos y verificar la salida

🏆 Logros

Después de completar este proyecto, podrás:

  • Trabajar con operaciones de E/S de archivos en Java, incluyendo la lectura y escritura en archivos
  • Utilizar las clases de archivos y flujos integradas de Java para manejar operaciones de archivos
  • Implementar un algoritmo personalizado de fusión de archivos para combinar el contenido de múltiples archivos
  • Probar y verificar la corrección del proceso de fusión de archivos

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/create_write_files("Create/Write Files") java/FileandIOManagementGroup -.-> java/read_files("Read Files") java/FileandIOManagementGroup -.-> java/io("IO") subgraph Lab Skills java/files -.-> lab-300382{{"Fusionar múltiples archivos alternativamente"}} java/create_write_files -.-> lab-300382{{"Fusionar múltiples archivos alternativamente"}} java/read_files -.-> lab-300382{{"Fusionar múltiples archivos alternativamente"}} java/io -.-> lab-300382{{"Fusionar múltiples archivos alternativamente"}} end

Implementar la función de fusión

En este paso, implementarás la función merge para fusionar el contenido de los archivos de entrada.

  1. Abre el archivo FileMerge.java en el directorio /home/labex/project.

  2. Localiza la función merge y reemplaza el código existente con la siguiente implementación:

public static void merge(String[] sourcePath, String outPath) throws IOException {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(outPath))) {
        BufferedReader[] readers = new BufferedReader[sourcePath.length];
        String[] currentLines = new String[sourcePath.length];
        boolean[] fileEmpty = new boolean[sourcePath.length];

        // Abre los readers para cada archivo fuente
        for (int i = 0; i < sourcePath.length; i++) {
            readers[i] = new BufferedReader(new FileReader(sourcePath[i]));
            currentLines[i] = readers[i].readLine();
            fileEmpty[i] = (currentLines[i] == null);
        }

        // Fusiona las líneas de cada archivo
        boolean allFilesEmpty = false;
        while (!allFilesEmpty) {
            allFilesEmpty = true;
            for (int i = 0; i < sourcePath.length; i++) {
                if (!fileEmpty[i]) {
                    writer.write(currentLines[i]);
                    writer.newLine();
                    currentLines[i] = readers[i].readLine();
                    fileEmpty[i] = (currentLines[i] == null);
                    allFilesEmpty = false;
                }
            }
        }

        // Cierra los readers
        for (BufferedReader reader : readers) {
            reader.close();
        }
    }
}

Esta implementación abre un BufferedReader para cada archivo de entrada, lee las líneas de cada archivo y escribe las líneas en el archivo de salida de manera alternada. Si un archivo no tiene más líneas, se salta hasta que todas las líneas de todos los archivos hayan sido escritas en el archivo de salida.

✨ Revisar Solución y Practicar

Ejecutar el proceso de fusión de archivos

En este paso, ejecutarás el proceso de fusión de archivos y verificarás la salida.

  1. Abre el archivo FileMerge.java en el directorio /home/labex/project.

  2. Localiza la función main y asegúrate de que el array strs contenga los nombres de los archivos de entrada: "1.txt", "2.txt" y "3.txt".

  3. Ejecuta la clase FileMerge ejecutando el siguiente comando en la terminal:

javac FileMerge.java
java FileMerge
  1. Después de que el programa se ejecute correctamente, se creará un nuevo archivo llamado 0.txt en el directorio /home/labex/project. Este archivo contendrá el contenido fusionado de los archivos de entrada.

  2. Abre el archivo 0.txt y verifica que el contenido coincida con la salida esperada:

1
6
7
2
8
3
9
4
5

¡Felicidades! Has completado con éxito el proyecto de fusión de archivos.

✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.