【问题标题】:ZipOutputStream - zipping files with wrong contentZipOutputStream - 压缩内容错误的文件
【发布时间】:2014-06-23 10:16:57
【问题描述】:

我可以压缩文件,但内容错误...例如 - a.txt 中的内容:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚„…†‡‰Š‹ŚŤŽŹ‘’“”•–—™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ`         

这是压缩文件的代码:

void zipping() throws FileNotFoundException, IOException {
        OutputStream os = new FileOutputStream("C:\\...\\newZip.zip");
        ZipOutputStream zos = new ZipOutputStream(os);

        File folder = new File("C:\\...\\A");

        for (final File fileEntry : folder.listFiles()) {
            //ZipEntry ze2 = new ZipEntry(fileEntry.getPath());
            //zos.putNextEntry(ze2);
            zos.putNextEntry(new ZipEntry(fileEntry.getName()));
            for (int i = 0; i < 10000; i++) {
                zos.write(i);
            }
        }
        zos.close();
    }

错误在哪里?感谢您的帮助。

【问题讨论】:

  • 这里没看懂for循环的使用!!!
  • 什么是错误?你能分享更多细节吗?
  • "C:\\...\\newZip.zip" 不是有效的文件名

标签: java zip zipfile zipoutputstream


【解决方案1】:

您正在将字节写入 zip 文件,从 1 到 10000。因此,根据使用的编码,您显示的输出是正确的。

也许您应该从要压缩的文件中读取。以下是您修改的代码。

void zipping(File file) throws FileNotFoundException, IOException {
        OutputStream os = new FileOutputStream("C:\\...\\newZip.zip");
        ZipOutputStream zos = new ZipOutputStream(os);

        File folder = new File("C:\\...\\A");

        for (final File fileEntry : folder.listFiles()) {

            FileInputStream in = new FileInputStream(fileEntry);
            zos.putNextEntry(new ZipEntry(fileEntry.getName()));

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

            // Read from file and write to zip file
            while ((count = in.read(b)) > 0) {
                zos.write(b, 0, count);
            }
        }    

        zos.close();
    }

【讨论】:

    【解决方案2】:

    像这样修改你的代码 -

        OutputStream os = new FileOutputStream("C:\\newZip.zip");
        ZipOutputStream zos = new ZipOutputStream(os);
    
        File folder = new File("C:\\zipit");
        byte[] buffer = new byte[1024];
        for (final File fileEntry : folder.listFiles()) {
            zos.putNextEntry(new ZipEntry(fileEntry.getName()));
            FileInputStream in = new FileInputStream(fileEntry.getAbsoluteFile());
            int len=0;
            while ((len = in.read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            }
        }
        zos.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多