5

我正在用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();
        }

但是,如果有新版本,我必须删除旧文件并用新文件替换。但是文件锁定不允许我删除文件。

我应该解锁并删除它,相信用户不会写入文件吗?或者有没有其他方法可以做到这一点?

4

1 回答 1

3

您可以截断文件:

fileChannel.truncate(0);

然后在其上写入新版本,这不会造成用户可以再次创建文件的时间间隔。

从文档:

如果给定的大小小于文件的当前大小,则文件被截断,丢弃文件新结尾之外的任何字节。如果给定大小大于或等于文件的当前大小,则不修改文件。在任何一种情况下,如果此通道的文件位置大于给定大小,则将其设置为该大小。

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#truncate%28long%29

于 2012-06-24T18:20:21.253 回答