FileLock과 함께 Windows 환경에서 Java로 파일을 잠그려고하고 있는데, 문제가 발생했습니다 : 파일을 잠근 후다른 어떤 프로세스에서 적어도 어느 정도는 액세스 할 수 있습니다.Java 파일 잠금 및 Windows - 잠금이 "절대적"이 아닙니까?
예제 코드는 다음과 같습니다
public class SimpleLockExample {
public static void main(String[] args) throws Exception {
String filename = "loremlipsum.txt";
File file = new File(filename);
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel channel = raf.getChannel();
FileLock lock = null;
try {
lock = channel.tryLock();
String firstLine = raf.readLine();
System.out.println("First line of file : " + firstLine);
waitForEnter();
lock.release();
} catch (OverlappingFileLockException e) {
e.printStackTrace();
}
lock.release();
System.out.println("Lock released");
channel.close();
}
private static void waitForEnter() throws Exception {
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
reader.close();
}
}
을 지금, 나는이 예제 내 파일을 잠글 때,이 잠겨 :
이 이- 그것은 Windows에서 삭제할 수 없습니다 이
- 이클립스가 거부 그것을 열어
... 그러나 그것은 완전히 방탄하지 않습니다 :
- 예를 들어 Scite (텍스트 편집기)로 열면 내용이 표시되지 않지만 열어 본 내용이나 작성된 내용으로 파일을 저장하도록 선택하면 파일이 지워졌습니다 ... (내용이 없어도 Scite로 무언가를 썼다해도)
Windows에서 Java로 다른 프로세스가 파일을 덮어 쓰거나 지우는 것을 방지하는 방법이 있습니까?
내가 올바르게 이해했다면 독점적 인 잠금 기능을 사용하고 있습니다. 공유 잠금을 사용하면 더 많은 작업을 수행 할 수 있습니다.
이 테스트는 Windows에서 실행 된 2000
BR, Touko