我讨厌为我能用if语句测试的东西生成异常。我知道如果您尝试使用java.util.zip/java.util.jar API访问它,则零长度zip / jar将触发异常。因此,似乎应该存在这些实用程序API能够使用的最小文件。
答案 0 :(得分:3)
你真的应该把这种代码放到try / catch中,因为在读/写文件时有很多东西可能出错吗?
如果您真的必须知道答案,那么尝试将1个字节的文件添加到zip中,然后查看是否失败了?从1 - >开始,您可以轻松完成各种尺寸的代码。 65536字节并添加到zip并查看哪些失败?
答案 1 :(得分:2)
Jar文件至少需要有一个条目。如果你想做一个空的,只做一个清单jar。
有关jar清单的更多信息,请参阅http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#JAR清单。
答案 2 :(得分:2)
根据 ZIP 文件格式specs,zip文件至少应具有46个字节长的中央目录结构+ 3个可变字段(请自行检查规范)。
也许我们应该假设至少有一个条目暗示该条目的文件头。
答案 3 :(得分:1)
我写了一个快速测试,我可以创建的最小的zip然后用java.util.zip API读回来是118字节。可能有一种方法可以使用zip实用程序创建一个符合规范且可读的较小的zip文件...
答案 4 :(得分:0)
最小的合法zip包含零个条目和一个“空”中央目录。
字节为:
80 75 05 06
后跟18个字节的零(0)。
所以,22个字节长。
创建它的VBscript:
Sub NewZip(pathToZipFile)
WScript.Echo "Newing up a zip file (" & pathToZipFile & ") "
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim file
Set file = fso.CreateTextFile(pathToZipFile)
file.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0)
file.Close
Set fso = Nothing
Set file = Nothing
WScript.Sleep 500
End Sub
NewZip "Empty.zip"
答案 5 :(得分:0)
final static byte[] EmptyZip={80,75,05,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00};
public static void createEmptyZip(String path){
try{
FileOutputStream fos=new FileOutputStream(new File(path));
fos.write(EmptyZip, 0, 22);
fos.flush();
fos.close();
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}