无法使用FileUtils

时间:2017-12-01 11:10:35

标签: java directory

我正在开发一个Java 8应用程序,它下载目录/文件列表并将它们存储在generate Temp目录(%LocalAppData%/Temp/中的目录)中。完成所有下载后,将生成一个XML文件并将其作为文本存储在数据库中。

使用以下命令创建Temp目录:

Path packageTargetDirectory = java.nio.file.Files.createTempDirectory("packages");

在我的JUnit测试中,我想测试功能。有用。因此,在测试之后,我希望我的testcode以递归方式删除带有内容的目录(使用org.apache.commons.io.FileUtils.deleteDirectory()方法)。

在使用@After注释注释的测试函数中调用该方法。在调用方法并测试代码时,我得到IOException

java.io.IOException: Unable to delete directory C:\Users\martin\AppData\Local\Temp\packages3096883734780765073\WindowsAzure.Storage

我到了目录,试图在测试运行后删除它:我可以自己删除它。我尝试了很多东西。我尝试了org.apache.commons.io.FileUtils.forceDelete()方法。我还尝试了以下代码删除:

Files.walkFileTree(testDataDirectory, new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            Files.delete(dir);
            return FileVisitResult.CONTINUE;
        }
    });

删除目录结构时一切都失败了。内容似乎被删除。

无法删除临时文件夹中的目录可能是什么问题?我在考虑打开流,但我似乎关闭了所有这些。

1 个答案:

答案 0 :(得分:0)

为什么不使用JUnit现有功能?

从java doc复制:

TemporaryFolder规则允许创建在测试方法完成时应删除的文件和文件夹(无论是通过还是失败)。此规则不会检查删除是否成功。如果删除失败,则不会抛出任何异常。

  @Rule
  public TemporaryFolder folder= new TemporaryFolder();

  @Test
  public void testUsingTempFolder() throws IOException {
      File createdFile= folder.newFile("myfile.txt");
      File createdFolder= folder.newFolder("subfolder");
      // ...
  }