FileOutputStream에의 시도 -과 - 자원 닫지 파일 설명을한다

니키타 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그것을 사용할 때 매우주의, 파일 기술자와 일부 암시 복사 작업을 수행하는 방법을. 여기에서 자세한 내용입니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=176555&siteId=1