2015-01-21 99 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