2012-04-12 3 views
4

많은 접근법이 있습니다. 하나는 프로그램을 생성하고 유닉스 tail 명령을 호출하는 것입니다. 그러나이 문제는 Unix 시스템에 프로세스를 설치해야한다는 것입니다 꼬리가 설치된 상태.가장 효율적인 방법으로 Java에서 로그 파일 꼬리/폴링

다른 옵션은 더 이상 줄이 없어 질 때까지 한 줄씩 파일을 읽은 다음 일정 시간 동안 휴면하고 다음 줄을 읽으려고 시도하는 것입니다.

질문은 활발히 쓰여지고있는 파일을 폴링하는 방법입니다. AFAIK 파일이 너무 낮은 레벨 (OS에서 오는 것임)로 수정되었을 때 Java에서 비동기 알림을받을 방법이 없습니다. 나는 이것을 지원하는 libs도 알고있다.

더 나은 접근 방법은 파일의 수정 된 날짜에 대한 설문 조사/설문 조사 일 수 있다고 생각했습니다.

모든 솔루션?

+0

Java 사용시 : – NightWolf

답변

5

Java 7을 사용할 수 있으면 File Watcher가 있으며 필요한 것을 구현할 수 있습니다.
자바 6 (이전) 당신이 당신의 자신의 파일 감시자을 만들 아파치 코 몬즈 VFS (File Monitor) lib 디렉토리를 사용해야합니다.

당신이 자바 7로 이동 또는 제 3 자의 libs와 사용할 수없는 경우를 들어 File Notifications

(예를 들어, 공유지 또는 jnotify) 당신이 가진 것 폴링 스레드를 사용하여 파일 감시에게 자기를 작성합니다.

+0

파일 알림은 항목 추가 및 제거에만 사용됩니다. ENTRY_MODIFY가 있지만 파일 길이가 아닌 디렉토리 항목 만 변경 한 것 같습니다. –

0

을 나도 몰라 답을. 그냥이 팁
1. 어쩌면 RandomAccessFile에 당신을 도울 것입니다.
2. 찾아보십시오 또 다른 오픈 소스 프로그램, 이 일을합니다.

이를 단순화하기 위해 할 수있는 일
1

이 파일의 크기와는 즉 많이 같은 끝에 도달 결코 읽어 설문 조사 스레드를 만드는 것입니다 (예를 들면하게 IntelliJ IDEA 정확히 이렇게). 이 데이터 읽기는 파이프에 기록되어 메인 스레드가 연속 파이프를 읽을 수있게합니다.

3

파일/디렉토리가 변경된 경우 java nio's WatchService을 사용하여 비동기 알림을받을 수 있습니다. 이 tutorial은 사용 방법을 설명합니다.

+0

Java 7, 사용하지 마십시오. 이 경우지만 좋은 제안. – NightWolf

관련 문제