Java.nio.Files.move多次移动文件时抛出异常

时间:2016-06-23 20:37:30

标签: java file nio move

我有一个场景,其中压力测试打开,循环移动和关闭文件多次。以下是示例代码段:

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也无法正常工作。请帮助我找出为什么会发生这种情况,我该如何摆脱这种情况。

1 个答案:

答案 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);