java用apache的ZipEntry压缩文件名为中文的word文件时,文件名乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java用apache的ZipEntry压缩文件名为中文的word文件时,文件名乱码相关的知识,希望对你有一定的参考价值。
public void zipFiles(File[] srcFile,File zipFile)
byte[] buf = new byte[1024];
try
ZipOutputStream out = new ZipOutputStream(zipFile);
for(int i =0;i<srcFile.length;i++)
if(srcFile[i]!=null)
FileInputStream 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();
out.close();
catch (Exception e)
e.printStackTrace();
log.error("文件压缩出错"+e.getMessage());
解决办法:用jdk的rt.jar里面的方法实现就可以了。
可以参考下以下工具类:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
*
* @author gdb
*/
public class ZipUtilAll
public static final int DEFAULT_BUFSIZE = 1024 * 16;
/**
* 解压Zip文件
*
* @param srcZipFile
* @param destDir
* @throws IOException
*/
public static void unZip(File srcZipFile, String destDir) throws IOException
ZipFile zipFile = new ZipFile(srcZipFile);
unZip(zipFile, destDir);
/**
* 解压Zip文件
*
* @param srcZipFile
* @param destDir
* @throws IOException
*/
public static void unZip(String srcZipFile, String destDir) throws IOException
ZipFile zipFile = new ZipFile(srcZipFile);
unZip(zipFile, destDir);
/**
* 解压Zip文件
*
* @param zipFile
* @param destDir
* @throws IOException
*/
public static void unZip(ZipFile zipFile, String destDir) throws IOException
Enumeration<? extends ZipEntry> entryEnum = zipFile.entries();
ZipEntry entry = null;
while (entryEnum.hasMoreElements())
entry = entryEnum.nextElement();
File destFile = new File(destDir + entry.getName());
if (entry.isDirectory())
destFile.mkdirs();
else
destFile.getParentFile().mkdirs();
InputStream eis = zipFile.getInputStream(entry);
System.out.println(eis.read());
write(eis, destFile);
/**
* 将输入流中的数据写到指定文件
*
* @param inputStream
* @param destFile
*/
public static void write(InputStream inputStream, File destFile) throws IOException
BufferedInputStream bufIs = null;
BufferedOutputStream bufOs = null;
try
bufIs = new BufferedInputStream(inputStream);
bufOs = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] buf = new byte[DEFAULT_BUFSIZE];
int len = 0;
while ((len = bufIs.read(buf, 0, buf.length)) > 0)
bufOs.write(buf, 0, len);
catch (IOException ex)
throw ex;
finally
close(bufOs, bufIs);
/**
* 安全关闭多个流
*
* @param streams
*/
public static void close(Closeable... streams)
try
for (Closeable s : streams)
if (s != null)
s.close();
catch (IOException ioe)
ioe.printStackTrace(System.err);
/**
* @param args
* @throws java.lang.Exception
*/
public static void main(String[] args) throws Exception
// unZip(new File(ZipDemo.class.getResource("D:/123/HKRT-B2B.zip").toURI()), "D:/123/");
unZip("D:/123/123.zip", "D:/123/");
// new File();
参考技术A
对于输出zip文件的ZipOutputStream对象设置一下编码:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
//设置filenames的编码
out.setEncoding("UTF-8");
通常linux下使用utf8进行文件命名编码,而windows下采用gbk,根据你的系统情况而定
可参考下api:
http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/api/org/apache/tools/zip/ZipOutputStream.html
追问亲,我试过啦 , 不好使啊 ,还是乱码
追答你用的是GBK还是utf8?
以上是关于java用apache的ZipEntry压缩文件名为中文的word文件时,文件名乱码的主要内容,如果未能解决你的问题,请参考以下文章