当前位置: 代码迷 >> J2SE >> 怎么使用java压缩文件夹成为zip包
  详细解决方案

怎么使用java压缩文件夹成为zip包

热度:80   发布时间:2016-04-24 01:09:35.0
如何使用java压缩文件夹成为zip包
要支持中文
而且是连外面的文件夹一起压缩进去
比方说文件夹名是abc
那么zip包中首先要看到的是abc,点进去看才是abc里面的文件
能做到吗?
看了不少,要么测下来不支持中文 要么不能把外面的文件夹一起压缩进去
谢谢大家了

------解决方案--------------------
JDK自带的ZIP类不支持中文,APACHE的ant.jar有ZIP工具类支持中文,我在网上找了一段代码,未测试
Java code
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"); }
  相关解决方案