使用REPLACE_EXISTING选项

时间:2016-04-19 08:38:22

标签: java file exception move

在我的代码中,有一个循环用另一个文件替换文件。

这是通过以下方式完成的:

java.nio.file.Files.move(Path source, Path target, CopyOption... options) throws IOException

抛出以下异常:

Exception in thread "main" java.nio.file.FileAlreadyExistsException: C:\BRUTE-FORCE\Test-Loads-2-forces-only.dat.temp -> C:\BRUTE-FORCE\Test-Loads-2-forces-only.dat
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileCopy.move(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.move(Unknown Source)
    at java.nio.file.Files.move(Unknown Source)
(*) at bruteforce.Main.changeValue(Main.java:260)
    at bruteforce.Main.main(Main.java:71)

抛出异常的行:

(*) at bruteforce.Main.changeValue(Main.java:260):

Files.move(path, path.resolveSibling("DESTINY_FILE"), REPLACE_EXISTING);

Javadoc定义了异常:

...
FileAlreadyExistsException - if the target file exists but cannot be replaced because the REPLACE_EXISTING option is not specified (optional specific exception) 
...

代码清楚地指定了REPLACE_EXISTING。

此选项也会在文件开头导入:

import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;

任何提示?

这可能是由于计算机(或硬盘驱动器)的hybernates或类似的东西? 我在使用电网时设置了电流选项而不是暂停。

提前致谢

1 个答案:

答案 0 :(得分:2)

Files.move不是原子操作(当然,除非指定了ATOMIC_MOVE),所以我假设发生了这种情况,因为其他IO对此文件进行了锁定。

请确保您:

  • 对此资源提供午餐close()方法或使用 try-with-resources

  • 您的操作系统未使用此文件(例如,在记事本中打开,午餐 tail 反对)

如果您经常访问文件,则可以尝试创建检查Files.isWritable()

的循环