use*_*768 5 java locking file delete-file
我正在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();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果有新版本,我必须删除旧文件并替换为新文件.但文件锁不允许我删除该文件.
我应该解锁并删除它写信,相信用户不会写入文件?或者还有其他方法吗?
您可以截断该文件:
fileChannel.truncate(0);
Run Code Online (Sandbox Code Playgroud)
然后在其上写入新版本,这不会产生用户可以再次创建文件的时间间隙。
来自文档:
如果给定的大小小于文件的当前大小,则文件将被截断,并丢弃超出文件新末尾的任何字节。如果给定大小大于或等于文件的当前大小,则不会修改文件。在任何一种情况下,如果该通道的文件位置大于给定大小,则将其设置为该大小。
http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#truncate%28long%29
| 归档时间: |
|
| 查看次数: |
10272 次 |
| 最近记录: |