是否Files.list()导致资源泄漏或不关闭流?

时间:2018-09-07 14:47:20

标签: java-8 try-catch java-stream fileutils

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()? 还有其他简单的方法可以完成它吗?

0 个答案:

没有答案