要支持中文
而且是连外面的文件夹一起压缩进去
比方说文件夹名是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"); }