我正在开发一个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;
}
});
删除目录结构时一切都失败了。内容似乎被删除。
无法删除临时文件夹中的目录可能是什么问题?我在考虑打开流,但我似乎关闭了所有这些。
答案 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");
// ...
}