2011-11-25 4 views
3

JNotify에 익숙하지 않은 사용자는 디렉토리의 이벤트를 쉽게 모니터링 할 수있는 라이브러리입니다.JNotify 라이브러리를 사용하여 삭제 된 파일이 파일인지 디렉토리인지 어떻게 알 수 있습니까?

예를 들어 파일이 선택한 폴더에서 삭제되면 몇 가지 매개 변수와 함께 메서드 "fileDeleted"가 호출됩니다. 다음은 fileDeleted 메소드의 예입니다.

public void fileDeleted(int wd, String rootPath, String name) { 
    print("deleted " + rootPath + " : " + name); 
} 

이제 삭제 된 파일이 파일인지 디렉토리인지 확인하고 싶습니다. 내 일반적인 접근 방식은 지정된 경로로 새 File 객체를 만들고 isFile() 및 isDirectory() 메서드를 사용하는 것입니다.

그러나이 파일은 이미 삭제 되었기 때문에 이러한 메서드는 항상 false를 반환합니다.

여기에 구체적인 질문이 있습니다. 삭제 된 파일 또는 디렉토리에 대한 경로가 있는데, 어떻게 파일이나 디렉토리인지를 어떻게 알 수 있습니까? 이 문제를 해결할 수 있습니까? 여기서 할 수있는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

답변

3

Commons IO과 같이 더 나은 API를 사용하는 것이 좋습니다. 그것의 인터페이스는 org.apache.commons.io.monitor.FileAlterationListener이고 그 방법은 onFile...(), onDirectory...()입니다. 또는 아마도 이것이 가장 좋은 방법 일 것입니다. here과 같이 Java 7, WatchService과 함께 제공되는 새로운 표준 기능을 사용하십시오.

+0

고마워, 나는 조사해 보았지만, WatchService는 RENAMED 알림을 지원하지 않는다. 이 기능을 추가하는 타사 라이브러리가 있지만 JNotify (여러 알림 등)에서 사용했던 WatchService와 동일한 문제가 있음을 발견했습니다. 결국 내 서버를 사용하기로 결정했습니다. 쉬운 클라이언트 솔루션이 없으므로 삭제 된 파일에 대한 지식이 필요합니다. 어쨌든 고마워! :) – Moeri

2

보고있는 디렉토리 구조의 크기는 어느 정도입니까?

내 첫 번째 본능은 몇 가지 간단한 그래프 탐색 알고리즘을 사용하여 디렉토리 구조의 내부 표현을 작성한 다음 무언가가 무엇인지 파악하기 위해 무언가가 제거 될 때마다 조회를 수행하는 것입니다.

<edit>
당신이 당신의 디렉토리 구조는 엄격한 나무 알고있는 경우 파일 시스템을 통과하고, booleanFile의 또는 String의지도를 제작하는 간단한 재귀를 사용할 수 있습니다, 그래서 당신은 쉽게 조회 할 수 있습니다. 그런 다음지도를 작성한 후에는 JNotify 이벤트를 사용하여 쉽게 유지 보수해야합니다.
<edit/>

중형 디렉토리의 경우에도이 방법이 상당히 빠르다고 생각합니다. 이게 뭐야? 같은 목표를 달성하기위한 또 다른 방법이 있을까요?

+0

디렉토리에있는 물건의 종류에 따라 당신은 간단한 재귀 알고리즘 (만해야 할 수도 있습니다 즉, 만드는 지름길이없는 경우 디렉토리가 트리가 아님), 그래프를 작성하지 않고 파일/디렉토리를 단지 맵에 저장하고 위치를 부울 isDirectory에 매핑 할 수 있습니다. 왜 서버에 묻지 않으시겠습니까? 서버가 어쨌든 파일을 추적하고 있다면, 단지 자신의 상태를 볼 수 없습니까? – Dogmatixed

+0

안녕하세요, 업데이트를 제공합니다. 클라이언트 측에서이 문제에 대한 해결 방법이 너무 정교하다고 판단 했으므로 이제 파일을 다루는 경우 서버 측을보고 있습니다. 왜냐하면 클라이언트는 이것을 정말로 알 필요가 없었기 때문이다. 내가이 스레드에 비틀 거린 사람들을 혼동하고 싶지 않기 때문에 나는 당신의 대답을 받아 들인 것으로 표시하지 않을 것입니다, 그리고 나는 명성이 충분하지 않기 때문에 분명히 당신을 업 홀드 할 수 없습니다 ... 그래서 저는 그냥 대신 고마워요, 당신의 시간! :) – Moeri

+0

문제는 없지만 실제로 Robert Petermeier의 대답이 더 나을 것이라고 생각합니다. 희망 프로젝트가 잘 간다! – Dogmatixed

0

나는 동일한 문제에 직면하고있다. 그러나 내가 이해하는 한, Java의 WatchService은 서브 디렉토리 모니터링을 허용하지 않으므로 사용할 수 없습니다 (~ 40K 폴더를 포함하는 구조의 변경 사항을 모니터링하는 것이 태스크입니다). 간단한 (틀린) 추론을 사용하여 계속 시도하고 진행합니다.

점 ('.')이 포함되어 있으면 파일입니다.

좀 더 정교한 뭔가 건너 있다면 업데이트를 게시 할 예정입니다

...

관련 문제