我正在使用Java为我的应用程序创建备份例程。 但是,当zip文件超过4GB或文件(大约)超过65,000时,zip文件已损坏。
我也在测试Apache Commons Compression压缩到tar.gz,但文件名限制为100个字符。 我想测试这个API压缩到zip,但我想知道java zip的问题究竟是什么。
所以,真正的问题是:我做错了什么,它是Java Zip实现的限制,还是Zip格式本身的限制?
感谢。
答案 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个条目,不再有。