Java에서 Unix "tail -f" 에뮬레이션
Java에서 "tail -f" 유틸리티의 기능을 구현하려면 효과적인 방법을 찾는 것이 필요합니다. 파일에 새로운 추가 사항이 있는지 모니터링하고 프로그램이 이러한 새 줄을 지속적으로 읽을 수 있도록 하는 기술 또는 라이브러리입니다. 이를 달성하려면 다음 접근 방식을 고려하십시오.
Apache Commons Tailer 클래스
주목할만한 옵션은 Apache Commons IO의 Tailer 클래스입니다. 이 클래스는 파일 및 해당 수정 사항을 모니터링하기 위한 간단한 솔루션을 제공합니다. "tail -f"의 동작과 유사하게 파일에 추가된 새 줄을 계속해서 읽을 수 있습니다. Tailer 클래스와의 통합은 다음 코드를 사용하여 달성할 수 있습니다.
Tailer tailer = Tailer.create(new File("application.log"), new TailerListener() { @Override public void handle(String line) { // Perform desired operations on the newly added line } }); tailer.run();
사용자 정의 파일 모니터링 구현
또는 정기적으로 사용자 정의 파일 모니터링 구현을 생성할 수도 있습니다. 파일 크기 변경을 확인하고 그에 따라 내부 버퍼를 업데이트합니다. 이 접근 방식을 사용하려면 Java 내의 파일 시스템 동작과 이벤트 수신 메커니즘을 더 깊이 이해해야 합니다. 다음은 간단한 예입니다.
import java.io.File; import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; public class TailFileMonitor implements Runnable { private File file; private long lastFileSize; public TailFileMonitor(File file) { this.file = file; this.lastFileSize = file.length(); } @Override public void run() { Path filePath = file.toPath(); try { WatchKey watchKey = filePath.getParent().register(new WatchService(), StandardWatchEventKinds.ENTRY_MODIFY); while (true) { WatchKey key = watchKey.poll(); if (key == watchKey) { for (WatchEvent<?> event : key.pollEvents()) { WatchEvent.Kind<?> kind = event.kind(); if (kind == StandardWatchEventKinds.ENTRY_MODIFY && event.context().toString().equals(file.getName())) { tailFile(); } } } key.reset(); } } catch (IOException e) { // Handle IO exceptions } } private void tailFile() { long currentFileSize = file.length(); if (currentFileSize != lastFileSize) { try (BufferedReader br = new BufferedReader(new FileReader(file))) { br.skip(lastFileSize); String line; while ((line = br.readLine()) != null) { // Process newly added lines } lastFileSize = currentFileSize; } catch (IOException e) { // Handle IO exceptions } } } }
사용자 정의 모니터를 활용하려면 인스턴스를 생성하고 스레드로 실행하세요. 파일의 변경 사항을 지속적으로 모니터링하고 그에 따라 버퍼를 업데이트합니다.
위 내용은 Java에서 Unix 'tail -f' 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!