Вызывает ли Files.list () утечку ресурсов или не закрывает поток?

Files.list () вызывает исключение IOException в FileUtils.deleteDirectory () с использованием Stream

Привет всем, я делал какой-то тест junit, я заметил, что некоторые тесты падали по неизвестной причине (если тест запускался индивидуально, все они работают)

Я заметил, что мне не удалось получить доступ к папкам, которыми управляет мой класс (в окнах), папка не была удалена, а в окнах, если я попытаюсь открыть / удалить всплывающее окно с ошибкой выигрыша, по-видимому, что-то удерживало папку и не позволяло ее удалить

После нескольких тяжелых часов я обнаружил, что если вы не поместите внутрь 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 ()? Есть ли другой простой способ сделать это?

или, может быть, порекомендовать лучшую практику

Philippe 07.09.2018 16:50

подождите, вам интересно, почему использование try with resource на самом деле хорошо? потому что если закрывает ресурсы, которые в противном случае остаются открытыми?

Eugene 07.09.2018 17:23

привет @eugene, спасибо за ваш ответ, так что в основном, насколько я понимаю, мне нужно поместить его в попытку, чтобы она закрылась, и знаете ли вы, есть ли какой-либо другой упрощенный способ сделать это без необходимости пытаться?

Philippe 07.09.2018 17:31

и, честно говоря, я не понимаю, почему он не закрывается, хотя это будет сделано автоматически

Philippe 07.09.2018 17:33

это самый простой способ, если вам придется делать это вручную, вы, вероятно, ошибетесь с первых попыток ...

Eugene 07.09.2018 17:33

Привет, Филипп, я знаю, что вы все еще новичок в Stack Overflow, но, пожалуйста, пожалуйста, пожалуйста, пожалуйста, попробуйте составлять настоящие предложения, используйте знаки препинания, корректируйте сами ... Если никто не хочет читать ваш вопрос, вряд ли вы получите ответ. Вы получите гораздо лучшие результаты, если приложите к этому больше усилий. В качестве побочного эффекта вы получите больше голосов и, следовательно, большую заметность. См. Также Как мне задать хороший вопрос? в Справочном центре и Написание идеального вопроса Джона Скита.

Didier L 07.09.2018 22:53

@DidierL - спасибо за предложение, я отредактировал вопрос, надеюсь будет лучше понять

Philippe 11.09.2018 15:43

Спасибо, @Philippe, это намного лучше. Я думаю, что на ваш вопрос уже дан ответ в приведенном выше. Надеюсь, это поможет.

Didier L 11.09.2018 15:53

@DidierL - Отлично, это действительно помогло, спасибо

Philippe 11.09.2018 16:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
58
0

Другие вопросы по теме