有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这个zip方法有什么问题?

我有一个方法,它可以将5个文件打包。它生成的zip文件没有错误,但我无法打开它来检查内容。我试着给它发电子邮件,gmail说它不能发送损坏的文件。尝试在Windows中使用WinRAR打开会导致一个错误,说明:

The archive is either in unknown format or damaged

方法如下:

private void zipTestFiles() throws FileNotFoundException, IOException
{
    File[] filenames = fileDir.listFiles(fileNameFilter(Constants.PAGE_MON_FILENAME_FILTER));

    byte[] buf = new byte[1024];

    String outFilename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separatorChar + Constants.PAGEMONITOR_ZIP;
    DeflaterOutputStream out = new DeflaterOutputStream(new BufferedOutputStream(new FileOutputStream(outFilename)));

    for (int i=0; i<filenames.length; i++)
    {
        FileInputStream in = new FileInputStream(filenames[i]);

        int len;
        while ((len = in.read(buf)) > 0)
        {
            out.write(buf, 0, len);
        }

        in.close();
        }
    out.close();
}

共 (2) 个答案

  1. # 1 楼答案

    你应该使用ZipOutputStream而不是DeflaterOutputStream。别忘了创建条目。在编写实现之前,请阅读ZipOutputStream的javadoc

  2. # 2 楼答案

    尝试使用已经存在于Java中的ZipoutStream。DeflaterOutputStream只使用DEFLATE方法进行压缩,但不会自动放置ZIP头