У меня есть код, который извлекает некоторые конкретные большие (около 15 тыс. Записей) двоичные сериализованные архивные файлы в папку на диске.
public void extractExact(Path absolutePath, DoubleConsumer progressConsumer) throws IOException
{
...
// Extract to file channel
try (final FileOutputStream fos = new FileOutputStream(absolutePath.toFile()))
{
PakExtractor.Extract(pakFile, Entry, fos.getChannel(), progressConsumer);
}
}
extractExact
вызывает функцию для каждой записи в архиве.
после этого, если я попытаюсь вызвать Files.delete(<archive_file_path>)
метод - я получу исключение:
java.nio.file.FileSystemException: процесс не может получить доступ к файлу, потому что он используется другимprocess.
Я проверил свой архивный файл в поиске Process Explorer, и он говорит, что у меня есть ~ 15k открытий файлов моим java.exe (столько же, сколько файлов в архиве)
это происходит только в Windows (jdk1.8.0_162).В Linux у меня нет проблем с "зомби" открытыми файлами.