Mehrere Dateien abwechselnd zusammenführen

JavaBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du mehrere Textdateien zeilenweise abwechselnd zusammenführen kannst. Dies ist eine häufige Aufgabe bei der Datenverarbeitung und Dateiverwaltung, bei der du möglicherweise den Inhalt mehrerer Dateien in eine einzelne Datei kombinieren musst.

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du die erforderlichen Eingabedateien für den Dateizusammenführungsvorgang vorbereitest
  • Wie du eine Funktion implementierst, um die Inhalte der Eingabedateien zusammenzuführen
  • Wie du den Dateizusammenführungsvorgang ausführst und die Ausgabe überprüfst

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Mit Datei-E/A-Operationen in Java umzugehen, einschließlich des Lesens aus und Schreibens in Dateien
  • Java's integrierte Datei- und Streamklassen zur Handhabung von Dateioperationen zu verwenden
  • Einen benutzerdefinierten Dateizusammenführungsalgorithmus zu implementieren, um die Inhalte mehrerer Dateien zu kombinieren
  • Den Dateizusammenführungsvorgang zu testen und die Korrektheit zu überprüfen

Implementiere die Merge-Funktion

In diesem Schritt wirst du die merge-Funktion implementieren, um die Inhalte der Eingabedateien zusammenzuführen.

  1. Öffne die Datei FileMerge.java im Verzeichnis /home/labex/project.

  2. Locate die merge-Funktion und ersetze den vorhandenen Code durch die folgende Implementierung:

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

        // Öffne Leser für jede Quell-Datei
        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);
        }

        // Verschmelze Zeilen aus jeder Datei
        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;
                }
            }
        }

        // Schließe Leser
        for (BufferedReader reader : readers) {
            reader.close();
        }
    }
}

Diese Implementierung öffnet einen BufferedReader für jede Eingabedatei, liest die Zeilen aus jeder Datei und schreibt die Zeilen in die Ausgabedatei abwechselnd. Wenn eine Datei keine weiteren Zeilen hat, wird sie übersprungen, bis alle Zeilen aus allen Dateien in die Ausgabedatei geschrieben wurden.

✨ Lösung prüfen und üben

Führe den Dateizusammenführungsvorgang aus

In diesem Schritt wirst du den Dateizusammenführungsvorgang ausführen und die Ausgabe überprüfen.

  1. Öffne die Datei FileMerge.java im Verzeichnis /home/labex/project.

  2. Locate die main-Funktion und überprüfe, ob das Array strs die Namen der Eingabedateien enthält: "1.txt", "2.txt" und "3.txt".

  3. Führe die FileMerge-Klasse aus, indem du den folgenden Befehl im Terminal ausführst:

javac FileMerge.java
java FileMerge
  1. Nachdem das Programm erfolgreich ausgeführt wurde, wird eine neue Datei namens 0.txt im Verzeichnis /home/labex/project erstellt. Diese Datei wird den zusammengeführten Inhalt der Eingabedateien enthalten.

  2. Öffne die Datei 0.txt und überprüfe, ob der Inhalt mit der erwarteten Ausgabe übereinstimmt:

1
6
7
2
8
3
9
4
5

Herzlichen Glückwunsch! Du hast das Dateizusammenführungs-Projekt erfolgreich abgeschlossen.

✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.