我有一个包含 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/