Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 디렉토리 내 모든 파일의 내용을 하나로 병합하는 프로그램

개요

여러 개의 텍스트 파일을 하나로 합쳐야 하는 경우가 종종 있습니다. Java에서는 File, BufferedReader, PrintWriter 클래스를 조합하면 특정 디렉토리에 있는 모든 파일의 내용을 손쉽게 읽어 들여 하나의 텍스트 파일로 병합할 수 있습니다.

예제 코드

import java.io.*;
public class Demo {
   public static void main(String[] args) throws IOException {
      File my_dir = new File("파일이 생성된 경로");
      PrintWriter my_writer = new PrintWriter("병합된 내용을 저장할 .txt 파일");
      String[] file_names = my_dir.list();
      for (String file_name : file_names) {
         System.out.println("Content read from " + file_name);
         File my_file = new File(my_dir, file_name);
         BufferedReader my_reader = new BufferedReader(new FileReader(my_file));
         my_writer.println("The file contains " + file_name);
         String my_line = my_reader.readLine();
         while (my_line != null) {
            my_writer.println(my_line);
            my_line = my_reader.readLine();
         }
         my_writer.flush();
      }
      System.out.println("All data from files have been read and " + my_dir.getName() + " merged");
   }
}

실행 결과

프로그램을 실행하면 지정한 디렉토리에 있는 모든 파일의 내용이 순서대로 읽혀 하나의 텍스트 파일에 병합되어 저장됩니다.

코드 설명

1. 디렉토리 및 출력 파일 준비

Demo라는 이름의 클래스 안에 main 함수가 정의되어 있습니다. 먼저 File 객체를 생성하고, 대상 파일들이 위치한 디렉토리 경로를 매개변수로 전달합니다. 이어서 병합된 결과를 저장할 출력용 텍스트 파일을 지정하여 PrintWriter 인스턴스를 생성합니다.

2. 파일 목록 조회와 반복 처리

list() 메서드를 호출하면 해당 디렉토리에 존재하는 모든 파일의 이름이 문자열 배열로 반환됩니다. for 루프를 통해 각 파일 이름을 하나씩 순회하면서, BufferedReader 인스턴스를 사용해 파일의 내용을 한 줄씩 읽어 들입니다.

3. 내용 기록과 버퍼 비우기

읽어 들인 각 줄은 PrintWriter를 통해 새 파일에 그대로 기록됩니다. 한 파일의 처리가 끝날 때마다 flush() 메서드를 호출하여 버퍼에 남아 있는 데이터를 모두 출력 스트림으로 밀어냄으로써, 어떠한 내용도 누락되지 않도록 보장합니다.

참고 사항

실무에서는 파일 입출력 작업 후 close() 메서드를 호출하거나 try-with-resources 구문을 사용해 리소스를 명시적으로 해제하는 것이 좋습니다. 또한 디렉토리 안에 텍스트 파일 외의 다른 형식(바이너리 파일 등)이 섞여 있을 경우, 확장자 검사 등의 필터링 로직을 추가하는 것이 안전합니다.