2011-11-20 2 views
8

파일이나 디렉토리가 삭제되었는지 감지하고 싶습니다. 분명히 파일/디렉토리가 이미 삭제 되었기 때문에 Files.isDirectory (Path)와 그와 동등한 파일을 사용할 수 없습니다.WatchService/Deletions/File or Directory?

두 개의 WatchService 인스턴스를 사용하여 파일 변경 또는 디렉토리 변경을 관찰 한 다음 파일이나 디렉토리 인 경우 항상 알고 있습니다. 슬프게도 적절한 방법을 찾을 수 없습니다.

편집 : 파일 이름과 디렉터리의 문자열 표현을 검사하는 것과 관련된 다른 해결책은 오류가 발생하기 쉽습니다.

+1

[이] (http://docs.oracle.com/javase/tutorial/essential/io/notification.html)을 사용해 보셨습니까? – home

+0

이것이 어떻게 도움이되는지 (WatchService를 사용하기 전에 읽었습니다.), 어쩌면 나는 눈이 멀었나요? ;-) – Johannes

+0

흠, 아마도 당신의 질문을 이해하지 못했습니까? 특정 디렉토리에서 '수신 대기'하도록 서비스를 등록 할 수 있습니다 - 그 문제점은 무엇입니까? – home

답변

2

보고있는 디렉토리에 메타 데이터의 로컬 복사본을 보관하십시오. 단순히 항목 목록 만 파일이나 디렉토리인지 여부와 관심있는 다른 속성과 함께 삭제하십시오. 크기 또는 최종 수정 시간. 그런 다음 삭제 알림을 받으면이 메타 데이터를 참조 할 수 있습니다.

시계 루프를 시작할 때이 메타 데이터 저장소를 채울 수 있습니다. 디렉토리를 감시하는 동안 다른 변경 사항이 발생하면 메타 데이터 저장소를 최신 상태로 유지하려면 ENTRY_CREATE 및 ENTRY_MODIFY와 함께 감시자를 확장하십시오.

허용되지만이 데이터를 유지하기 위해 약간의 추가 오버 헤드가 메모리에 추가되지 않지만 대부분의 경우에는 그다지 중요하지 않습니다.

+0

좋은 생각이지만 제안 된 솔루션보다 더 많은 오버 헤드가있는 것 같습니다. 글쎄, 나는 다른 해결책을 생각할 수 없다. – Johannes

관련 문제