2013-12-13 2 views
1

java FileSystem을 사용하여 디렉토리 내의 파일을 압축하려고합니다. 몇 개의 파일 만 있으면 잘 작동하지만 100 개가 넘는 파일이 있으면 실패합니다.java의 여러 파일 zip 오류 ZIP FileSystem

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space 

어디 내가 잘못 :

Map<String, String> env = new HashMap<>(); 
env.put("create", "true"); 
URI uri = URI.create("jar:file://10.0.8.31/Shared/testFile.zip"); 
long bytesRead = 0; 
File dir = new File("D:\\Shared\\DPXSequence"); 

try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) { 
    for (File sourceF : dir.listFiles()) { 
     Path externalFile = Paths.get(sourceF.getAbsolutePath()); 
     Path pathInZipfile = zipfs.getPath("/" + sourceF.getName()); 

     // copy a file into the zip file 
     Files.copy(externalFile, pathInZipfile, StandardCopyOption.REPLACE_EXISTING); 
    } 
} 
catch(Exception e) { 
    System.out.println("Error : "+e.toString()); 
} 

이 내가지고있어 오류는 다음과 같습니다

이것은 내가 내 프로그램에서 사용되는 코드는? Files.copy() 실제로 압축되어 대상 폴더에 복사되기 전에 실행이 완료된 것 같습니다. 그것이 문제의 원인입니까?

+1

아마도 @ diego-giagio 대답에 의한이 [대답] (http://stackoverflow.com/a/23861949/2287893) 대답은 OOM을 극복하는 데 도움이됩니다. – MZerau

답변

1

복사하려는 파일이 크거나 System.gc()이 활성화되지 않고 사용 된 메모리가 지워진 이유가 무엇이든간에.

그래서 다음 확인 :

입력 [이루어지는 시스템()]에있어서, 상기 후 files.copy을

OR

실행에 할당 메모리와 Java 프로그램 :

java -Xmx1024M -Xms1024M -jar jarName.jar Xmx는 할당하려는 최대 크기 (M과 함께 MB 단위)이며 Xms는 초기 값입니다. 컴퓨터의 RAM을 초과하지 않고 원하는 것을 1024로 바꿀 수 있습니다.

+0

각 파일의 크기는 약 8MB입니다. 거의 5000 개의 파일이 압축됩니다. 'System.gc();'와 함께 행운을 빌어 요. 자바에 더 많은 메모리를 할당 할 수 없습니다. 내 환경에 제약이 있습니다. –

+0

파일을 읽는 것처럼 거의해야 할 것입니다. "버퍼"를 사용하고 한 번에 조금씩 복사하십시오. 미안 해요,하지만 위의 코드를 사용하여 구현하는 방법을 모르겠다 .. System.gc() 일해야합니다 .. 오 잘. – user2494817