Fusionner plusieurs fichiers alternativement

JavaBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à fusionner plusieurs fichiers texte ligne par ligne de manière alternée. C'est une tâche courante dans le traitement de données et la gestion de fichiers, où vous devrez peut-être combiner le contenu de plusieurs fichiers dans un seul fichier.

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment préparer les fichiers d'entrée nécessaires au processus de fusion de fichiers
  • Comment implémenter une fonction pour fusionner le contenu des fichiers d'entrée
  • Comment exécuter le processus de fusion de fichiers et vérifier la sortie

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Travailler avec les opérations d'entrée/sortie de fichiers en Java, y compris la lecture et l'écriture dans des fichiers
  • Utiliser les classes de fichiers et de flux intégrées à Java pour gérer les opérations de fichiers
  • Implémenter un algorithme de fusion de fichiers personnalisé pour combiner le contenu de plusieurs fichiers
  • Tester et vérifier la correction du processus de fusion de fichiers

Implémentez la fonction de fusion

Dans cette étape, vous allez implémenter la fonction merge pour fusionner le contenu des fichiers d'entrée.

  1. Ouvrez le fichier FileMerge.java dans le répertoire /home/labex/project.

  2. Localisez la fonction merge et remplacez le code existant par la mise en œuvre suivante :

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];

        // Ouvrez les lecteurs pour chaque fichier source
        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);
        }

        // Fusionnez les lignes de chaque fichier
        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;
                }
            }
        }

        // Fermez les lecteurs
        for (BufferedReader reader : readers) {
            reader.close();
        }
    }
}

Cette implémentation ouvre un BufferedReader pour chaque fichier d'entrée, lit les lignes de chaque fichier et écrit les lignes dans le fichier de sortie de manière alternée. Si un fichier n'a plus de lignes, il est ignoré jusqu'à ce que toutes les lignes de tous les fichiers aient été écrites dans le fichier de sortie.

✨ Vérifier la solution et pratiquer

Exécutez le processus de fusion de fichiers

Dans cette étape, vous allez exécuter le processus de fusion de fichiers et vérifier la sortie.

  1. Ouvrez le fichier FileMerge.java dans le répertoire /home/labex/project.

  2. Localisez la fonction main et assurez-vous que le tableau strs contient les noms des fichiers d'entrée : "1.txt", "2.txt" et "3.txt".

  3. Exécutez la classe FileMerge en exécutant la commande suivante dans le terminal :

javac FileMerge.java
java FileMerge
  1. Après l'exécution réussie du programme, un nouveau fichier nommé 0.txt sera créé dans le répertoire /home/labex/project. Ce fichier contiendra le contenu fusionné des fichiers d'entrée.

  2. Ouvrez le fichier 0.txt et vérifiez que le contenu correspond à la sortie attendue :

1
6
7
2
8
3
9
4
5

Félicitations! Vous avez réussi à compléter le projet de fusion de fichiers.

✨ Vérifier la solution et pratiquer

Résumé

Félicitations! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires dans LabEx pour améliorer vos compétences.