2012-06-24 4 views
5

나는 디렉터리를 모니터링하고 백업하는 java로 프로그램을 만들고 있습니다. 때로는 수정 된 파일을 저장소에 업로드하거나 새로운 버전이 있으면 다운로드해야합니다. 이렇게하려면 사용자가 내용을 변경하거나 삭제할 수 없도록 파일을 잠 가야합니다. 현재 내가 파일을 잠금이 코드를 사용하고 있습니다 :파일 잠금 및 삭제

 file = new RandomAccessFile("C:\\Temp\\report.txt", "rw"); 

     FileChannel fileChannel = file.getChannel(); 
     fileLock = fileChannel.tryLock(); 
     if (fileLock != null) { 
      System.out.println("File is locked"); 

      try{ 

      //Do what i need  

      }catch (Exception e){//Catch exception if any 
       System.err.println("Error: " + e.getMessage()); 
      } 
     } 
     else{ 
      System.out.println("Failed"); 
     } 
    } catch (FileNotFoundException e) { 
     System.out.println("Failed"); 
    }finally{ 
     if (fileLock != null){ 
      fileLock.release(); 
     } 

그러나 나는 이전 파일을 삭제하고 새 것으로 교체해야 새 버전이있는 경우. 그러나 파일 잠금을 사용하여 파일을 삭제할 수 없습니다.

내가 잠금 해제하고 삭제해야할까요? 사용자가 파일에 쓸 수 없다는 것을 신뢰합니까? 아니면 이것을하는 다른 방법이 있습니까?

+1

이 어쨌든 작동하지 않습니다. FileLocks는 사용자가 파일을 변경하거나 삭제하지 못하게합니다. 그들은 단지 다른 프로그램이 파일을 잠그는 것을 막을뿐입니다. – EJP

답변

3

당신은 파일을자를 수 :

fileChannel.truncate(0); 

를, 그 후 그 위에 새 버전을 쓰기이 사용자가 파일을 다시 만들 수있는 시간 간격을 만들 것입니다. 문서에서

:

주어진 크기가 파일의 새로운 끝을지나 어느 한 바이트를 파기 한 다음 파일 이 잘립니다 파일의 현재의 사이즈보다 작은 경우. 주어진 크기가 파일의 현재 크기 인 보다 크거나 같으면 파일이 수정되지 않습니다. 어느 쪽의 경우에서도,이 채널의 파일 의 위치가 지정된 사이즈보다 큰 경우는 그 사이즈로 설정됩니다.

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#truncate%28long%29

+0

큰 그림을 놓치지 않는 한, 파일의 내용 만 지 웁니다. 그래서 내가 필요로하는 것이 아닙니다. – user1308768

+0

* 잠금을 해제하고 삭제해야합니까? 사용자가 파일에 쓸 수 없다는 사실을 신뢰합니까? 아니면 다른 방법이 있습니까? * 파일을 잠근 후 사용할 수있는 * truncate *로 응답하여 콘텐츠를 지우고 새 콘텐츠를 작성하므로 삭제할 시간 간격이 없습니다. 파일을 만들고 동기화 할 파일을 기반으로 새 파일을 만듭니다. –

+0

난 그냥 몇 가지 추가 설명을 추가 ... 제발 좀 더 설명이 필요하면 알려 주시기 바랍니다. –