Files.list()使用流导致FileUtils.deleteDirectory()上的IOException
大家好,我在进行一些junit测试,我注意到某些测试由于未知原因而下降(如果测试是单独运行的,那么它们都可以工作)
我注意到我无法访问由我的班级操纵的文件夹(在Windows中),但该文件夹未删除;在Windows中,如果我尝试打开/删除win错误弹出窗口,显然是因为该文件夹在阻止该文件夹已被删除
经过数小时的努力,我发现如果您不将其放入try()内,则文件File.list将继续保存该文件夹,原因是我无法删除。
>package java.nio.file;
package org.apache.commons.io;
引起问题:
String id = Files.list(tempDir.toPath())
.map(Path::toFile)
.filter(File::isDirectory)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("data is missing " + tempDir.getAbsolutePath()))
.getName();
但是,如果您尝试一下,一切都很好
String Id;
try (Stream<Path> sFiles = Files.list(tempDir.toPath())) {
sipId = sFiles
.map(Path::toFile)
.filter(File::isDirectory)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("data is missing" + tempDir.getAbsolutePath()))
.getName();
}
这在我上面带有代码的课程结束后运行
if (manifestFolder.exists()) {
try {
FileUtilenter code heres.deleteDirectory(manifestFolder);
} catch (IOException e) {
e.printStackTrace();
}
}
我的问题是为什么我需要尝试使用Files.list()? 还有其他简单的方法可以完成它吗?