1

我们有一个 linux 应用程序,由于以下调用,我们无法卸载 USB 驱动器。我需要正确关闭流的文件资源吗?

     Files.newDirectoryStream(
         Paths.get(importDir), 
         path -> path.toString().endsWith(".ini") && path.toFile().isFile())
            .forEach(path -> importItems.add(path));

这是响应的输出:

umount: /media/flashdrive: target is busy
    (In some cases useful info about processes that
     use the device is found by lsof(8) or fuser(1).)

我们目前使用的是 java 8。

4

1 回答 1

2

您需要关闭您打开的目录流:

未能关闭流可能会导致资源泄漏。try-with-resources 语句提供了一个有用的构造来确保流被关闭

https://docs.oracle.com/javase/8/docs/api/java/nio/file/DirectoryStream.html

    try (DirectoryStream<Path> paths = Files.newDirectoryStream(
            Paths.get(importDir),
            path -> path.toString().endsWith(".ini") && path.toFile().isFile())) {

        paths.forEach(path -> importItems.add(path));
    }

另一种方法是直接调用paths.close()

于 2020-03-25T23:23:16.160 回答