在不释放锁定的情况下移动文件



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

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

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

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

尝试使用 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();
    }
}

祝你好运

相关内容

  • 没有找到相关文章

最新更新