使用Java压缩文件:是否有限制?

时间:2011-07-18 20:07:35

标签: java zip backup gzip tar

我正在使用Java为我的应用程序创建备份例程。 但是,当zip文件超过4GB或文件(大约)超过65,000时,zip文件已损坏。

我也在测试Apache Commons Compression压缩到tar.gz,但文件名限制为100个字符。 我想测试这个API压缩到zip,但我想知道java zip的问题究竟是什么。

所以,真正的问题是:我做错了什么,它是Java Zip实现的限制,还是Zip格式本身的限制?

感谢。

4 个答案:

答案 0 :(得分:13)

引自Wikipedia

  

原始ZIP格式对各种内容都有4 GiB的限制   (文件的未压缩大小,文件的压缩大小和总大小   (存档),以及ZIP存档中65535个条目的限制。

和ZIP64:

  

Java的内置java.util.zip从9月开始不支持它   2010年,但它已被添加到OpenJDK并计划包含在   Java 7。

答案 1 :(得分:4)

这是在Java 7中报告已修复的错误:http://bugs.sun.com/view_bug.do?bug_id=4681995

该门票上的一位评论者提到TrueZIP作为解决方法。

答案 2 :(得分:2)

标准Zip文件的文件大小限制为4GB。

有关更多信息,请参阅wikipedia entry on zip files ......如果您使用ZIP64格式,显然可以获得更大的文件。

P.S。如果你发现自己一次尝试备份4GB以上的数据,或许你应该考虑采用不同的方法?也许采用版本化文件系统快照的东西会更合适吗?

答案 3 :(得分:0)

是的,有一个限制。如果你浏览

这样的条目
        int count  = 0;
        for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
            final ZipEntry ze = e.nextElement();
            count++;
        }

它将计入65535个条目,不再有。