Как закрыть обработчик файлов при использовании Files.newDirectoryStream () в java 8 - PullRequest
1 голос
/ 26 марта 2020

У нас есть приложение 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.

1 Ответ

2 голосов
/ 26 марта 2020

Вам необходимо закрыть открываемый поток каталога:

Невозможность закрыть поток может привести к утечке ресурса. Оператор 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() напрямую.

...