java - 在Java中复制文件而不锁定原始文件

标签 java copy locking

我有一个包含 20 个文件的文件夹,“myFile1.txt”到“myFile20.txt”。一个程序(我们称之为“WRITER”)可能会写入这些文件。

现在,我想使用 FileUtils by Apache commons 在 Java 中复制该文件夹。 ,更具体地说是方法 FileUtils.copyDirectoryToDirectory() 。但是,我担心如果我使用该方法,我会在复制过程中锁定文件,从而使“WRITER”程序无法再写入文件。

有谁知道FileUtils中的方法是否锁定文件?如何防止在复制时锁定原始文件(如果是这样的话)?

谢谢!

编辑:我使用的是 Windows

最佳答案

我的理解是所有基于 Linux 的锁本质上都是建议性的。调用者必须检查锁。从这个意义上说,这并不是一个万无一失的解决方案。由于在同一目录中重命名文件是一个原子操作,因此最好的方法可能是将文件重命名为某个随机名称,复制到新目录并删除旧文件。

如果您可以控制文件的读取者和写入者,则可以使用 nio.FileChannel 及其提供的锁定功能。读取器和写入器在访问之前都必须检查锁。

关于java - 在Java中复制文件而不锁定原始文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437857/

相关文章:

java - 如何加粗文本Android String的一部分

java - 在 Java 构建路径上找不到父类(super class) "javax.servlet.http.HttpServlet"

java - JxBrowser 6.19.1 PDF 打印问题

python - 字典解包运算符与 copy.deepcopy 之间的区别?

java - 为什么反射成员必须在传播之前复制?

java - 关于对象创建的基本事情 :is it a good practice to create a new object of listener, 每次我们想为一个 View 设置一个监听器

c++ - CUDA 将继承的类对象复制到设备

混帐 'fatal: Unable to write new index file'

java - Java 应用程序的锁分析器

android - 如何以编程方式使用智能锁 Lollipop 关闭屏幕