移动文件而不释放锁定

时间:2016-01-29 20:47:15

标签: java nio move filelock

我在Spring批处理应用程序中使用Java NIO。应用程序在目录(例如/ shared / inbox)中查找,其中/ shared是在不同JVM上运行的所有应用程序实例之间的网络共享磁盘。

为了避免多个线程读取相同的文件,在我的ItemReader中,我使用FileLock并避免其他线程从中读取。

当我完成阅读时,我想将文件移动到另一个目录(例如/ shared / archive)。但是除非我放弃FileLocl,否则Files.move方法不能这样做,如果我放弃锁定,我冒着其他线程挑选文件的风险。

问题是,我可以将文件从收件箱移动到存档而不放弃FileLock吗?

1 个答案:

答案 0 :(得分:1)

尝试使用java.nio.channels.FileChannel

复制文件
private static void copyFileUsingFileChannels(File source, File dest)throws IOException {
    FileChannel inputChannel = null;
    FileChannel outputChannel = null;
    try {
        inputChannel = new FileInputStream(source).getChannel();
        outputChannel = new FileOutputStream(dest).getChannel();

        outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
    } finally {
        inputChannel.close();
        outputChannel.close();
    }
}
祝你好运