2016-12-14 14 views
4

디렉토리에 새 파일이 있는지 모니터링하고 디렉토리에있는 새 파일을 처리하는 Java 응용 프로그램이 있습니다. 응용 프로그램을 linux 및 windows env에서 실행해야합니다. 문제는 리눅스에서 사용자가 디렉토리의 파일을 수동으로 복사 할 때 응용 프로그램이 파일을 완전히 선택하기 전에 선택하여을 디렉토리에 복사합니다. 은 다양한 방법을 사용하여 파일을 잠그려고했으나 응용 프로그램은 파일이 Linux 시스템에 의해 여전히 복사되고있는 경우에도 파일에 대한 잠금을 획득 할 수 있습니다. 나는 또한 lsof 명령을 사용하여 파일을 검사하는 것을 고려해 왔지만, 이것은 리눅스에서만 발생하므로이를 피하려고합니다.Linux + Java + Windows : 파일 복사 완료 여부 확인


누군가는 응용 프로그램에 의해 선택되는 불완전한 파일을 방지 할 수있는 방법을 제안시겠습니까? 미리 감사드립니다.

+0

이 문제에 대한 한 가지 방법은 항상 두 개의 파일을 대상 폴더에 복사하는 것입니다. 먼저 실제 데이터 파일을 대상 폴더에 복사하고 해당 파일 "fileName.dat"을 호출 할 수 있습니다. 이 파일 복사가 성공적으로 완료되면 대상 폴더 내에 "fileName.done"이라는 더미 파일을 만듭니다. 응용 프로그램은 ".done"으로 끝나는 파일을 감지하고 읽을 준비가 된 "fileName.dat"을 인식합니다. – Hector

+0

디렉토리에서 누가 파일을 복사하는지 제어 할 수 있다면 불행히도 파일을 복사 할 사람과 파일을 어떻게 안내하는지 모릅니다. – Prashant

+0

크기가 5 분 정도로 안정 될 때까지 또는 적절한 것으로 판단 될 때까지 사용하지 마십시오. – EJP

답변

0

당신은 이초 같은 일부 구간에서 파일 크기를 확인 할 수있는 경우는 다른 다음 파일은 당신이 갈 수없는 경우 복사되는 :

0

당신이 수행 할 수있는 한 가지 방법은 프로그램이 있음을 감지 할 때입니다 새로운 파일이 디렉토리에 존재, 그것은 목록에 해당 파일을 추가하고 정기적으로 다음과 같은 방법으로 목록에있는 각 요소의 파일 크기를 확인할 수 있습니다

파일 # 길이

하면 일정 시간 후 파일 크기가 변경되지 않았다면 이론적으로 파일을 완전히 복사하고 디렉토리로 플러시해야합니다.

+0

응답 주셔서 감사합니다, 나는 또한 이것을 고려했지만 매우 깨끗한 솔루션으로 보이지 않습니다. 다른 제안이 있으십니까? – Prashant

+0

또 다른 가능한 해결책은 프로그램이 원본 파일을 재귀 적으로 검색하고 복사 된 파일로 파일 크기를 확인하는 것입니다. 한 번만 검색하면 프로그램의 절대 경로를 캐시 할 수 있습니다. –

0

해결책은 this 게시물의 답변 일 수 있습니다. jpoller으로 시도 할 수 있습니다.