java'da bir dizini izleyen ve yedekleyen bir program yapıyorum. Zaman zaman, değiştirilmiş dosyaları depoya yüklemem veya yeni bir sürümü varsa indirmem gerekiyor. Bunu yapmak için dosyayı kilitlemek zorundayım, böylece kullanıcı içeriği değiştiremez veya silemez. Şu anda dosyayı kilitlemek için bu kodu kullanıyorum:Dosya kilitleme ve silme
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();
}
Ancak eski dosyayı silmek ve yenisiyle değiştirmek zorunda yeni bir sürümü varsa. Ancak Dosya kilidi dosyayı silmeme izin vermiyor.
Kilidi açıp silmeli miyim, kullanıcının dosyaya yazmayacağına güvenmek mi yazıyor? Yoksa bunu yapmanın başka bir yolu var mı?
Zaten bu işe yaramaz. FileLocks, kullanıcının dosyayı değiştirmesini veya silmesini engellemez. Sadece diğer programların dosyayı kilitlemesini engeller. – EJP