什么是最小的,合法的zip / jar文件?

时间:2010-03-13 15:06:46

标签: java exception jar zip

我讨厌为我能用if语句测试的东西生成异常。我知道如果您尝试使用java.util.zip/java.util.jar API访问它,则零长度zip / jar将触发异常。因此,似乎应该存在这些实用程序API能够使用的最小文件。

6 个答案:

答案 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();
    }

}