前提要求是:一般的zip压缩都是压缩一批文件,有一个文件夹A,里面有一批文件和一个子文件夹B,B里也有一些文件。要将文件夹A压缩成zip文件,而不破坏文件的结构,即解压后还是一个文件夹A,里面是一批文件和子文件夹B。
大家看看吧,我也不知道是哪个有问题反正一个文件用这两个一个压缩一个解压出来的结果和原来不一致!解出来的结果只是把原来文件的所有最底层的文件列出来了,而没有了子目录结构。
如果能看出是哪个有问题最好能给改好,多谢了。压缩算法如下:
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(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();
}
}
}解压算法如下:
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();
   
  }