[java] Apache Commons IO를 이용한 파일 이벤트 처리하기

파일 이벤트 처리는 자바 애플리케이션에서 파일의 변경, 삭제, 이동 등과 같은 이벤트를 감지하고 처리하는 기능을 의미합니다. Apache Commons IO는 파일 및 디렉토리 작업을 보다 쉽게 수행할 수 있는 유용한 유틸리티 라이브러리입니다. 이번 포스트에서는 Apache Commons IO의 FileAlterationObserver 클래스를 사용하여 파일 이벤트를 감지하고 핸들링하는 방법을 알아보겠습니다.

파일 이벤트 처리를 위한 의존성 추가하기

먼저, Apache Commons IO를 사용하기 위해 해당 라이브러리를 프로젝트에 추가해야 합니다. 일반적으로 Maven 또는 Gradle과 같은 의존성 관리 도구를 통해 라이브러리를 추가할 수 있습니다. 아래는 Maven을 사용하는 경우의 의존성 추가 예시입니다.

<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
</dependencies>

파일 이벤트 처리기 정의하기

파일 이벤트를 처리하기 위해 FileAlterationObserver 클래스의 인스턴스와 FileAlterationListener 인터페이스를 구현하는 이벤트 처리기를 정의해야 합니다. 아래는 파일이 변경될 때 로그를 출력하는 간단한 예시입니다.

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;

public class MyFileEventListener implements FileAlterationListener {

    @Override
    public void onStart(FileAlterationObserver observer) {
        System.out.println("Monitoring started...");
    }

    @Override
    public void onDirectoryCreate(File directory) {
        System.out.println("Directory created: " + directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryChange(File directory) {
        System.out.println("Directory changed: " + directory.getAbsolutePath());
    }

    @Override
    public void onDirectoryDelete(File directory) {
        System.out.println("Directory deleted: " + directory.getAbsolutePath());
    }

    @Override
    public void onFileCreate(File file) {
        System.out.println("File created: " + file.getAbsolutePath());
    }

    @Override
    public void onFileChange(File file) {
        System.out.println("File changed: " + file.getAbsolutePath());
    }

    @Override
    public void onFileDelete(File file) {
        System.out.println("File deleted: " + file.getAbsolutePath());
    }

    @Override
    public void onStop(FileAlterationObserver observer) {
        System.out.println("Monitoring stopped...");
    }
}

파일 이벤트 감지하기

이제 파일 이벤트를 감지하고 처리하기 위해 FileAlterationObserver를 사용해야 합니다. 아래는 파일 이벤트를 감지하는 메인 메서드의 예시입니다.

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;

public class Main {

    public static void main(String[] args) throws Exception {
        // 대상 디렉토리를 지정하고 이벤트 처리기를 생성합니다.
        File directory = new File("/path/to/directory");
        FileAlterationObserver observer = new FileAlterationObserver(directory);
        FileAlterationListener listener = new MyFileEventListener();
        observer.addListener(listener);

        // 파일 변경을 감지하는 주기를 지정하고 모니터링을 시작합니다.
        long interval = 5000; // 5초
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
        monitor.addObserver(observer);
        monitor.start();

        // 일정 시간 대기 후 모니터링을 중지합니다.
        Thread.sleep(60000); // 1분
        monitor.stop();
    }
}

위 예시에서 FileAlterationObserver는 지정한 디렉토리에서 이벤트를 감지하고, MyFileEventListener는 해당 이벤트를 처리하는 역할을 합니다. FileAlterationInterval은 파일 변경을 감지하는 주기를 지정하며, 모니터링 시작 후 일정 시간이 지나면 모니터링을 중지합니다.

결론

이번 포스트에서는 Apache Commons IO를 사용하여 파일 이벤트를 감지하고 처리하는 방법을 알아보았습니다. 이를 통해 파일 관련 작업을 보다 간편하게 수행할 수 있으며, 파일 변화를 실시간으로 감지하여 이벤트에 맞는 처리를 수행할 수 있습니다.

더 많은 세부 설정 및 기능은 Apache Commons IO 공식 문서를 참고하시기 바랍니다.