你可以使用java.util.zip.ZipOutputStream来完成
private static void zipDir(String prefix, File srcDir, ZipOutputStream zip)
throws IOException { File[] files = srcDir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
zipDir(prefix + "/" + files[i].getName(), files[i], zip);
else {
FileInputStream fis = new FileInputStream(files[i]);
ZipEntry entry =
new ZipEntry(prefix + "/" + files[i].getName());
zip.putNextEntry(entry);
byte[] buf = new byte[1024];
for (int readed = fis.read(buf);readed >= 0; readed = fis.read(buf))
zip.write(buf, 0, readed);
zip.closeEntry();
fis.close();
}
}
}

解决方案 »

  1.   

    you should read the book,<Thinking in java>
      

  2.   

    ChDw(米)给的zipDir函数会破坏文件格式。
      

  3.   

    否则就是这个程序有问题,大家再看看吧,我也不知道是哪个有问题
    反正一个文件用这两个一个压缩一个解压出来的结果和原来不一致!
    public static void extract(File zipf, File dir) throws ZipException,
          IOException
      { 
        if (!dir.exists())
        {
          dir.mkdirs();
        }
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipf));
        ZipEntry zipEntry;
        while ( (zipEntry = zipIn.getNextEntry()) != null)
        {
          System.out.println(zipEntry.getName());
          File aimf = new File(dir, zipEntry.getName());
          
          if (zipEntry.isDirectory())
          {
            aimf.mkdirs();
            
            continue;
          }
          FileOutputStream aimOut = new FileOutputStream(aimf);
          byte[] buf = new byte[1024];
          int offs;
          while ( (offs = zipIn.read(buf)) != -1)
          {
            aimOut.write(buf, 0, offs);
          }
          aimOut.close();
          zipIn.closeEntry();
        }
        zipIn.close();
       
      }
      

  4.   

    这个是因为我的程序并没有单独建立一个zipEntry.isDirectory()的对象,其实这个并不是必须的
    只需要在你File aimf = new File(dir, zipEntry.getName());之后
    aimf.getParent().mkdirs()也就可以了
      

  5.   

    to: ChDw 帮你更正一下
    aimf.getParent.mkdirs() 应该改为:aimf.getParentFile.mkdirs();