用Java创建zip存档

hud*_*udi 33 java zip

我有一个由7zip程序创建的文件.我使用deflate方法来压缩它.现在我想创建相同的存档(具有相同的MD5sum)java.当我创建zip文件时,我使用了我在互联网上找到的算法,例如http://www.kodejava.org/examples/119.html但是当我用这种方法创建zip文件时,压缩的大小高于未压缩的文件是怎么回事?这不是一个非常有用的压缩.那么如何创建与我用7zip程序创建的zip文件完全相同的zip文件呢?如果它有助于我获得有关我在7zip程序中创建的zip文件的所有信息.

小智 60

// simplified code for zip creation in java

import java.io.*;
import java.util.zip.*;

public class ZipCreateExample {

    public static void main(String[] args) throws Exception {

        // input file 
        FileInputStream in = new FileInputStream("F:/sometxt.txt");

        // out put file 
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream("F:/tmp.zip"));

        // name the file inside the zip  file 
        out.putNextEntry(new ZipEntry("zippedjava.txt")); 

        // buffer size
        byte[] b = new byte[1024];
        int count;

        while ((count = in.read(b)) > 0) {
            out.write(b, 0, count);
        }
        out.close();
        in.close();
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*ell 6

只是为了澄清一下,你在7zip中使用ZIP算法作为原始版本?此外,7zip声称压缩率比其他供应商高2-10%.我猜想Java中内置的ZIP算法并不像7zip那样优化.如果你想要一个类似的压缩文件,最好的方法是从命令行调用7zip.

您是否尝试解压缩ZIP文件,更改其中的文件,然后重新压缩它以使其具有相同的MD5哈希?哈希意味着阻止你这样做.


Max*_*xym 6

ZipOutputStream几乎没有调整压缩的方法:

public void setMethod(int method)

设置后续条目的默认压缩方法.只要没有为单个ZIP文件条目指定压缩方法,就会使用此默认值,并且最初设置为DEFLATED.

public void setLevel(int level)

设置DEFLATED后续条目的压缩级别.默认设置为DEFAULT_COMPRESSION.级别 - 压缩级别(0-9)

当您添加以下内容后:

ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(target));
zos.setMethod( ZipOutputStream.DEFLATED );
zos.setLevel( 5 );
...
Run Code Online (Sandbox Code Playgroud)

它不会改善您的压缩吗?