如何在java中将.zip压缩为.gz?

时间:2016-03-28 14:11:33

标签: java server zip gzipoutputstream

我想将普通文件压缩为.zip,然后将其压缩为gzip文件而不创建新文件。

例如,假设我有一个pdf文档 doc.pdf ,我必须得到的是:doc.pdf.zip.gz

我不想创建一个名为doc.pdf.zip的新文件,然后将其打开并进行gzip。

我正在使用服务器从浏览器获取文件并将其返回,这是我的功能:

 public void ZIPandGZIP(String fileName, OutputStream os, String header) throws FileNotFoundException
 {
    File file = new File(fileName);
    FileInputStream fis = new FileInputStream(file);
    byte[] data = new byte[(int) file.length()];
    DataOutputStream dos = new DataOutputStream(os);
    try {
        dos.writeBytes(header);
        ZipOutputStream zpos = new ZipOutputStream(os); 
        zpos.putNextEntry(new ZipEntry(fileName));
        GZIPOutputStream gos = (new GZIPOutputStream(zpos));
        fis.read(data);
        gos.write(data);

        zpos.flush();
        zpos.close();
        gos.flush();
        gos.close();
        dos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 }

我收到一个文件doc.pdf.zip.gz但它有一个损坏的文件doc.pdf而没有压缩为什么?

1 个答案:

答案 0 :(得分:2)

我认为您可以为zip创建一个临时文件,将其添加到gzip,然后删除创建的zip。以下代码示例应该可以帮助您。

$user = $serializer->deserialize($data, 'Namespace\User', 'json');

希望它有所帮助。