Объединение нескольких файлов поочередно

JavaBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь объединять несколько текстовых файлов по строкам в чередующемся порядке. Это распространенная задача в обработке данных и управлении файлами, где может потребоваться объединить содержимое нескольких файлов в один файл.

🎯 Задачи

В этом проекте вы научитесь:

  • Как подготовить необходимые входные файлы для процесса объединения файлов
  • Как реализовать функцию для объединения содержимого входных файлов
  • Как запустить процесс объединения файлов и проверить выходные данные

🏆 Достижения

После завершения этого проекта вы сможете:

  • Работать с операциями ввода-вывода файлов в Java, включая чтение из и запись в файлы
  • Использовать встроенные классы файлов и потоков Java для обработки операций с файлами
  • Реализовать пользовательский алгоритм объединения файлов для объединения содержимого нескольких файлов
  • Тестировать и проверять правильность процесса объединения файлов

Реализуйте функцию объединения

В этом шаге вы реализуете функцию merge, чтобы объединить содержимое входных файлов.

  1. Откройте файл FileMerge.java в директории /home/labex/project.

  2. Найдите функцию merge и замените существующий код на следующую реализацию:

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

        // Откройте читатели для каждого исходного файла
        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);
        }

        // Объедините строки из каждого файла
        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;
                }
            }
        }

        // Закройте читатели
        for (BufferedReader reader : readers) {
            reader.close();
        }
    }
}

Данная реализация открывает BufferedReader для каждого входного файла, читает строки из каждого файла и записывает строки в выходной файл в чередующемся порядке. Если в файле больше нет строк, он пропускается, пока не будут записаны все строки из всех файлов в выходной файл.

Запустите процесс объединения файлов

В этом шаге вы запустите процесс объединения файлов и проверите выходные данные.

  1. Откройте файл FileMerge.java в директории /home/labex/project.

  2. Найдите функцию main и убедитесь, что массив strs содержит имена входных файлов: "1.txt", "2.txt" и "3.txt".

  3. Запустите класс FileMerge, выполнив следующую команду в терминале:

javac FileMerge.java
java FileMerge
  1. После успешного выполнения программы в директории /home/labex/project будет создан новый файл с именем 0.txt. В этом файле будет содержаться объединенное содержимое из входных файлов.

  2. Откройте файл 0.txt и проверьте, что содержимое соответствует ожидаемому выходу:

1
6
7
2
8
3
9
4
5

Поздравляем! Вы успешно завершили проект по объединению файлов.

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться