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();
}
}
    }ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("E:/Write/a.zip"));
zipDir("",new File("E:/MyDir/"),zip);
zip.close();但是在Java里面,如果文件或者目录名是中文的,在Zip包里面会变成UTF-8编码的,注意。

解决方案 »

  1.   

    哦,closeEntry后面最后加上fis.close();关闭文件流
      

  2.   

    哦,谢谢,那想问问utf-8码,是什么意思,我对象gb2312等编码的慨念不是很清楚。
    还有一个问题,信誉分怎样才可以加上去,谢谢
      

  3.   

    如果你使用Java来解压则不需要任何的处理,默认就是正确的,只是说在Winzip中你会发现目录好像是乱码的样子。
      

  4.   

    可以告诉我解压代码怎么写吗,我想了好半天也没有写出来,我贴出来你看看我那里错了。谢谢了,
    private static void unZipDir(
    String prefix,
    ZipFile zipFile,
    ZipInputStream zip)
    throws IOException {
    //ZipFile zipFile = new ZipFile(srcDir);
    for (Enumeration e = zipFile.entries(); e.hasMoreElements();) {
    ZipEntry zipEntry = (ZipEntry) e.nextElement();
    if (zipEntry.isDirectory())
    unZipDir(prefix+"/"+zipEntry.getName(),srcDir,zip); 
    else
    }
    具体思路不是很清楚,望指点,谢谢。马上揭贴,再次谢谢。
      

  5.   

    upuppup^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^