我有一些代码,可以将某个特定的大型(约15k条目)二进制序列化文件归档提取到磁盘上的文件夹中。
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 Explorer中搜索我的归档文件,并发现我的java.exe有大约15k个文件打开(与归档文件中的文件数量一样多)。
这只发生在Windows上(jdk1.8.0_162)。在Linux上,我没有任何“僵尸”打开的文件问题。
fos.flush()
?这可能是因为仍然有要写的内容。 - Saschatry(FileChannel ch = FileChannel.open(absolutePath, StandardOpenOption.WRITE, StandardOpenOption.CREATE)) { вҖҰ }
еҚіеҸҜпјҢдёҚйңҖиҰҒдҪҝз”Ё.toFile()
е’Ң.getChannel()
гҖӮеҰӮжһңжӮЁжғійҡҸеҗҺеҲ йҷӨиҜҘж–Ү件пјҢеҸҜд»ҘеңЁopen
и°ғз”ЁдёӯжҢҮе®ҡStandardOpenOption.DELETE_ON_CLOSE
гҖӮ - Holgertry
的finally
部分。 - Sascha