2012-04-04 6 views
4

Java를 통해 내 시스템에서 선택한 디렉토리의 변경 사항을 모니터하고 싶습니다. watchservice는 자바 7에서 watchservice에 대해 약간의 아이디어가있다. 그러나 watchservice는 변경 이벤트 (MODIFY, DELETE)가 발생하는 디렉토리 이름 만 리턴한다. 다른 사람은 변경 한 사람, 변경 한 시간 등 변경에 대한 모든 정보를 원합니다.Java를 통한 파일 시스템 변경 모니터링

NTFS 파일 시스템에서 변경 저널을 읽고 싶을 때와 같습니다. Java에서 이러한 변경 사항을 비동기 적으로 기록 할 수있는 다른 방법이 있습니까? ...

미리 감사드립니다.

http://commons.apache.org/io/api-release/org/apache/commons/io/monitor/FileAlterationObserver.html

답변

3

확실하지 공유지를-IO는 사용자의 요구에 맞게 수있는 FileAlterationObserver있다 및

그냥 터들하고 싸우는데 얻고 싶은 경우에 대한 추가 정보는 Oracle tutorial

+0

+1 아주 멋진 도서관이지만 뭔가 바뀌었을 때 얻을 수는 없지만 누가 무엇을 만들 었는지 알 수 없습니다. –

+1

이것은 좋은 도서관입니다. 그러나 파일 시스템 변경을위한 비동기 이벤트를 원할 때 폴링 기술을 사용하는 것으로 들립니다. 여하튼, 나는이 lib를 더 탐구 할 것이다. 예, 라이브러리 추가 기능을 가져올 수 있습니다. –

2

당신이 java7를 사용하는 경우가 java.nio.file.FileSystem를 보라 : 당신은 당신의 프로젝트 만에 수입 라이브러리를 추가 할 수있는 기능이있는 경우

+0

+1 "out-of-the-box"솔루션 : – quaylar

+1

그러나 이미 질문에서 언급 한 watchservice를 통과합니다. –

0

을 참조하십시오 WatchService 뭔가 일이 생기면 대답에 게시 된 도서관 중 하나를 사용할 수 있습니다.

작은 예제를 사용하여 직접 (그리고 Windows로만 제한)이 작업을 수행하려면이 article about Java Native Interface을 살펴보십시오. ReadDirectoryChanges 함수를 사용하면 비동기 알림을 수신하도록 결정할 수 있습니다.

실제로이 변경 사항을 작성한 사람을 알아야 할 경우 ... 행운을 빈다. 내가 아는 한 (그리고 Windows 만 해당) Windows는 그 정보를 저장하지 않기 때문에 이것은 간단한 주제가 아닙니다. Object Auditing으로 JNI를 통해 얻을 수 있지만 활성화해야만 시스템이 약간 느려집니다. 자세한 내용은 this post을 참조하십시오.

+0

감사합니다. 제공된 정보는 매우 유용합니다. 사실 나는 JNI 호출을 찾고 있는데도 동일한 요구를하지만 NativeCall과 매우 관련이 있다고합니다. –

+0

@Shailesh_B JNI 호출이 없으면 JNI 스펙이 나열되고, 네이티브 Windows API가 없으면 수행 할 수 없습니다. – EJP

+0

@EJP 그렇습니다. "위험"은 노출 된 "간단한"C API로 더티 작업을 수행 할 수 있도록 작은 네이티브 DLL을 작성해야합니다. –