여러 파일 번갈아 가며 병합하기

JavaBeginner
지금 연습하기

소개

이 프로젝트에서는 여러 텍스트 파일을 번갈아 가며 줄 단위로 병합하는 방법을 배우게 됩니다. 이는 여러 파일의 내용을 단일 파일로 결합해야 할 수 있는 데이터 처리 및 파일 관리에서 흔히 사용되는 작업입니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 파일 병합 프로세스에 필요한 입력 파일을 준비하는 방법
  • 입력 파일의 내용을 병합하는 함수를 구현하는 방법
  • 파일 병합 프로세스를 실행하고 출력을 확인하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • Java 에서 파일 입출력 (I/O) 작업을 수행할 수 있으며, 파일에서 읽고 쓰는 작업 포함
  • Java 의 내장 파일 및 스트림 클래스를 사용하여 파일 작업을 처리할 수 있습니다
  • 여러 파일의 내용을 결합하는 사용자 정의 파일 병합 알고리즘을 구현할 수 있습니다
  • 파일 병합 프로세스의 정확성을 테스트하고 확인할 수 있습니다

병합 기능 구현

이 단계에서는 입력 파일의 내용을 병합하는 merge 함수를 구현합니다.

  1. /home/labex/project 디렉토리에서 FileMerge.java 파일을 엽니다.

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

        // Open readers for each source file
        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);
        }

        // Merge lines from each file
        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;
                }
            }
        }

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

이 구현은 각 입력 파일에 대해 BufferedReader를 열고, 각 파일에서 줄을 읽어 번갈아 가며 출력 파일에 줄을 씁니다. 파일에 더 이상 줄이 없으면 모든 파일의 모든 줄이 출력 파일에 기록될 때까지 건너뜁니다.

✨ 솔루션 확인 및 연습

파일 병합 프로세스 실행

이 단계에서는 파일 병합 프로세스를 실행하고 출력을 확인합니다.

  1. /home/labex/project 디렉토리에서 FileMerge.java 파일을 엽니다.

  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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.