要支持中文
而且是连外面的文件夹一起压缩进去
比方说文件夹名是abc
那么zip包中首先要看到的是abc,点进去看才是abc里面的文件
能做到吗?
看了不少,要么测下来不支持中文 要么不能把外面的文件夹一起压缩进去
谢谢大家了

解决方案 »

  1.   

    JDK自带的ZIP类不支持中文,APACHE的ant.jar有ZIP工具类支持中文,我在网上找了一段代码,未测试import java.io.*;
    import org.apache.log4j.Logger;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import org.apache.tools.zip.ZipOutputStream;public class ZipCompress { private static Logger log = Logger.getLogger(ZipCompress.class);
     
    public static void zip(File inputFile, String zipFileName) {
      try {
       //创建文件输出对象out,提示:注意中文支持
       FileOutputStream out = new FileOutputStream(
         new String(zipFileName.getBytes("UTF-8"))); 
       //將文件輸出ZIP输出流接起来
       ZipOutputStream zOut = new ZipOutputStream(out);   
       log.info("压缩-->开始");
      
       zip(zOut, inputFile, "");
      
       log.info("压缩-->结束");
       zOut.close();
     
      } catch (Exception e) {  
       e.printStackTrace();
      } }   public static void zip(ZipOutputStream zOut, File file, String base) {  
      try {    // 如果文件句柄是目录
       if (file.isDirectory()) {
        //获取目录下的文件
        File[] listFiles = file.listFiles();
        // 建立ZIP条目
        zOut.putNextEntry(new ZipEntry(base + "/"));     
        log.info("目录名:"+file.getName()+"|加入ZIP条目:"+base+"/");
        
        base =( base.length() == 0 ? "" : base + "/" );
        
        // 遍历目录下文件
        for (int i = 0; i < listFiles.length; i++) {
         // 递归进入本方法
         zip(zOut, listFiles[i], base + listFiles[i].getName());
        }
       }
       // 如果文件句柄是文件
       else {
        if (base == "") {  
         base = file.getName();
        }
        // 填入文件句柄
        zOut.putNextEntry(new ZipEntry(base));
        log.info("文件名:"+file.getName()+"|加入ZIP条目:"+base);
        
        // 开始压缩
        // 从文件入流读,写入ZIP 出流
        writeFile(zOut,file);
       }
      
      } catch (Exception e) {
       e.printStackTrace();
      } }  public static void writeFile(ZipOutputStream zOut,File file) throws IOException{
      log.info("开始压缩"+file.getName());
      FileInputStream in = new FileInputStream(file);  
      int len;
      while ((len = in.read()) != -1)
       zOut.write(len);
      log.info("压缩结束"+file.getName());
      in.close();
     }
     
    public static void main(String[] args) {  zip(new File("C:/test/DATA/reportFile/"+"TASK"+10421), "c:/ziptest.zip"); }