关于使用java自带ZipOutputStream压缩文件名为中文的乱码问题

摘要 由于业务要求,会对文件系统中部分文件处理打包操作,开始我使用java6自带的api处理,当文件名中带有中时,打包之后的压缩文件会产生中文乱码的问题,后听说java7解决了这一问题,,因行业的滞后性我没有做这样的尝试,有兴趣的读者可以自己研究一下。下面提供我的一个解决方案(apache下文件流工具)。

step1:引入jar包

step2:代码样例

//部分包引入样例import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;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 ZipUtil {Logger logger = Logger.getLogger(ZipUtil.class);/*** 功能:压缩多个文件成一个zip文件* @param srcfile:源文件列表* @param zipfile:压缩后的文件*/public static boolean zipFiles(File[] srcfile,File zipfile){boolean reFlag = false;byte[] buf=new byte[10240];ZipOutputStream out = null;FileInputStream in = null;try {//ZipOutputStream类:完成文件或文件夹的压缩 out=new ZipOutputStream(new FileOutputStream(zipfile));//注意此处编码设置out.setEncoding(“gbk”);for(int i=0;i<srcfile.length;i++){in=new FileInputStream(srcfile[i]);out.putNextEntry(new ZipEntry(srcfile[i].getName()));int len;while((len=in.read(buf))>0){out.write(buf,0,len);}out.closeEntry();in.close();in = null;}out.close();out = null;reFlag = true;logger.info(“压缩完成,文件详细信息为:”+zipfile.getAbsolutePath());} catch (Exception e) {e.printStackTrace();} finally{if(in!=null){try {in.close();in = null;} catch (IOException e) {e.printStackTrace();}}if(out!=null){try {out.close();out = null;} catch (IOException e) {e.printStackTrace();}}}return reFlag;}}

一个今天胜过两个明天

关于使用java自带ZipOutputStream压缩文件名为中文的乱码问题

相关文章:

你感兴趣的文章:

标签云: