Tworzę program w języku Java, który monitoruje i tworzy kopię zapasową katalogu. Od czasu do czasu muszę przesłać zmodyfikowane pliki do repozytorium lub pobrać je, jeśli istnieje nowa wersja. W tym celu muszę zablokować plik, aby użytkownik nie mógł zmienić jego zawartości ani go usunąć. Obecnie używam tego kodu, aby zablokować plik:Blokowanie i usuwanie plików
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();
}
Jednak jeśli pojawia się nowa wersja muszę usunąć stary plik i zastąpić nową. Ale blokada pliku nie pozwala mi usunąć pliku.
Czy mogę je odblokować i usunąć, zapisując, ufając, że użytkownik nie napisze w pliku? Czy jest jakiś inny sposób robienia tego?
To nie będzie działać tak. FileLocks nie uniemożliwiają użytkownikowi zmiany lub usunięcia pliku. Zapobiegają tylko blokowaniu pliku przez inne programy. – EJP