니키타 Mirosnicenko :
나는 추출물 일부 특정 대형 (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는 : 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일을 액세스 할 수 없습니다.
나는 프로세스 탐색기 검색에서 내 보관 파일을 확인하고 그것이 내가 (아카이브에있는 파일 많은 등) 내 java.exe를하여 ~ 15K 파일 구멍을 말한다
이 창 (jdk1.8.0_162)에서만 발생합니다. 리눅스에 나는 "좀비"오픈 파일에 문제가 없습니다.
니키타 Mirosnicenko :
마지막으로 - 우리는 해결책을 발견. @Netherwire에 감사드립니다. 되는 FileChannel 클래스가 map
그것을 사용할 때 매우주의, 파일 기술자와 일부 암시 복사 작업을 수행하는 방법을. 여기에서 자세한 내용입니다.