Я делаю программу на 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();
}
Однако, если есть новая версия, я должен удалить старый файл и заменить его новым. Но блокировка файла не позволяет мне удалить файл.
Должен ли я разблокировать и удалить запись, полагая, что пользователь не будет писать в файл? Или есть другой способ сделать это?