2015-01-21 97 views
2

雖然我試圖在大小爲144MB的zip文件中以附加模式打開2.2GB的csv文件,我得到以下例外。Java在使用java7打開zipfile文件內的附加模式下打開2.2GB的大文件時出錯NIO

java.lang.IllegalArgumentException: Negative initial size: -2030790440 
    at java.io.ByteArrayOutputStream.<init>(ByteArrayOutputStream.java:74) 
    at com.sun.nio.zipfs.ZipFileSystem.getOutputStream(ZipFileSystem.java:1371) 
    at com.sun.nio.zipfs.ZipFileSystem.newOutputStream(ZipFileSystem.java:516) 
    at com.sun.nio.zipfs.ZipPath.newOutputStream(ZipPath.java:792) 
    at com.sun.nio.zipfs.ZipFileSystemProvider.newOutputStream(ZipFileSystemProvider.java:285) 
    at java.nio.file.Files.newOutputStream(Files.java:170) 
    at java.nio.file.Files.newBufferedWriter(Files.java:2705) 
    at 

這是我正在使用的代碼片段。
代碼行:

filePath = "/tmp/tmp.zip"; 
Path path = Paths.get(filePath); 
URI uri = URI.create("jar:" + path.toUri()); 
fs = FileSystems.newFileSystem(uri, env); 
Path nf = fs.getPath("detailedreport.csv"); 
Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.APPEND); 


文件已經存在
好像BufferWriter的INT最大限制在讀取文件,因此異常的尺寸達到。

回答

0

好像好像。也許他們會在未來的某個時間將最大陣列長度增加到64位(可能不是)。

那麼你現在卡住了嗎?爲什麼不解壓文件,追加數據並重新解壓呢?

0

由於使用int作爲參數創建底層ByteArrayOutputStream,所以Java無法處理多於Integer.MAX_VALUE。見here