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 ()? Есть ли другой простой способ сделать это?
подождите, вам интересно, почему использование try with resource
на самом деле хорошо? потому что если закрывает ресурсы, которые в противном случае остаются открытыми?
привет @eugene, спасибо за ваш ответ, так что в основном, насколько я понимаю, мне нужно поместить его в попытку, чтобы она закрылась, и знаете ли вы, есть ли какой-либо другой упрощенный способ сделать это без необходимости пытаться?
и, честно говоря, я не понимаю, почему он не закрывается, хотя это будет сделано автоматически
это самый простой способ, если вам придется делать это вручную, вы, вероятно, ошибетесь с первых попыток ...
Привет, Филипп, я знаю, что вы все еще новичок в Stack Overflow, но, пожалуйста, пожалуйста, пожалуйста, пожалуйста, попробуйте составлять настоящие предложения, используйте знаки препинания, корректируйте сами ... Если никто не хочет читать ваш вопрос, вряд ли вы получите ответ. Вы получите гораздо лучшие результаты, если приложите к этому больше усилий. В качестве побочного эффекта вы получите больше голосов и, следовательно, большую заметность. См. Также Как мне задать хороший вопрос? в Справочном центре и Написание идеального вопроса Джона Скита.
@DidierL - спасибо за предложение, я отредактировал вопрос, надеюсь будет лучше понять
Спасибо, @Philippe, это намного лучше. Я думаю, что на ваш вопрос уже дан ответ в приведенном выше. Надеюсь, это поможет.
Также есть Закрывают ли терминальные операции поток?
@DidierL - Отлично, это действительно помогло, спасибо
или, может быть, порекомендовать лучшую практику