Как закрыть неявный поток в Java? - PullRequest
0 голосов
/ 08 января 2019

Files.walk - это один из потоков, который я должен закрыть, однако, как мне закрыть поток в коде, как показано ниже? Код ниже действителен или мне нужно переписать его, чтобы у меня был доступ к потоку, чтобы закрыть его?

List<Path> filesList = Files.walk(Paths.get(path)).filter(Files::isRegularFile ).collect(Collectors.toList());

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы должны использовать его с try-with-resource как:

try(Stream<Path> path = Files.walk(Paths.get(""))) {
    List<Path> fileList = path.filter(Files::isRegularFile)
                               .collect(Collectors.toList());
}

apiNote для Files.walk явно гласит:

This method must be used within a try-with-resources statement or similar
control structure to ensure that the stream's open directories are closed
promptly after the stream's operations have completed.
0 голосов
/ 08 января 2019

Согласно документации Files.walk :

Возвращенный поток инкапсулирует один или несколько DirectoryStreams. Если требуется своевременное удаление ресурсов файловой системы, Конструкция try-with-resources должна использоваться для обеспечения того, чтобы метод close потока вызывается после того, как завершено. Работа в закрытом потоке приведет к IllegalStateException.

Акцент мой.

...