我有一个场景,其中压力测试打开,循环移动和关闭文件多次。以下是示例代码段:
String path = "TestFile.txt";
for (int i = 0; i < 10000; ++i) {
System.out.println("opening file " + i + " times");
RandomAccessFile file = new RandomAccessFile(path, "rw");
File f = new File("temp.txt");
if (f.exists())
f.delete();
boolean retValue = f.createNewFile();
if (retValue) {
file.close();
Files.move(Paths.get("temp.txt"),Paths.get(path),
StandardCopyOption.REPLACE_EXISTING);
} else {
System.out.println("Error reporting");
}
}
当我尝试运行此代码时,它会在运行300到400次后抛出异常。
线程“main”中的异常java.nio.file.FileAlreadyExistsException:C:\ Users \ angupt \ Desktop \ temp.txt - &gt; C:\ Users \ kellogs \ Desktop \ TestFile.txt at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:81) 在 sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) 在sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) 在java.nio.file.Files.move(Files.java:1395)at temp.mainClass.main(mainClass.java:37)
我想这个异常正在发生,因为文件打开,移动和关闭非常快,但我不知道如何正确处理这种情况。 Thread.sleep也无法正常工作。请帮助我找出为什么会发生这种情况,我该如何摆脱这种情况。
答案 0 :(得分:0)
我不知道它会有所帮助,但是当移动选项设置如下时我遇到了这个问题:
CopyOption[] options = new CopyOption[]{
StandardCopyOption.REPLACE_EXISTING
,StandardCopyOption.COPY_ATTRIBUTES
};
Files.move(source, target, options);
当我摆脱COPY_ATTRIBUTES时,它开始正常工作!
CopyOption[] options = new CopyOption[]{
StandardCopyOption.REPLACE_EXISTING
};
Files.move(source, target, options);