У меня есть в моем коде процесса java, который открывает файл для записи с использованием Files.newOutputStream, который находится внутри оператора try-with-resources. После того, как я закончил писать файлы (все написано так же) и закрыто. Они удалены вместе с папкой, в которой находятся файлы.Открыть файловые дескрипторы в lsof as (удалено)
String folder = "folder"
try(OutputStream out = Files.newOutputStream(Paths.get(folder + '/' + fileName), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
//...
out.write(buffer);
//...
} catch(IOException excp) {
excp.printStackTrace();
}
FileUtils.forceDelete(new File(folder));
Но, когда я смотрю в LSOF (я бегу CentOS) Я вижу, что эти файлы (и не может быть 20k или 30k) показаны как (удалены) в LSOF и означает, что они открыты. Я не могу понять, как закрытый файл может оставаться открытым, и в конечном итоге я получаю слишком много открытых дескрипторов файлов. Итак, я знаю, что могу поднять предел, но я хочу правильно закрыть или сделать файл закрытым, а не увеличивать пределы.
Спасибо !!!
Пожалуйста, измените вопрос, чтобы включить соответствующий исходный код вашей программы Java. То есть, код, который создает эти файлы, записывает на них и удаляет их. – Kenster
@SlavaG, что такое FileUtils? apache commons io? – lincolnadym
@lincolnadym FileUtils.forceDelete - это Apache FileUtils, правильно. – SlavaG