java解压zip中文乱码,zip压缩文件名字乱码
java实现zip压缩中文文件名乱码怎么办?
java实现zip压缩中文文件名乱码的解决办法:
一、文件压缩的中文乱码问题
1、中文文件名的乱码解决
对于压缩的文件,当文件名称是中文时,若使用文档中自带的类(Java。util。拉链。zip条目;Java。util。拉链。zip输出流;)进行压缩,压缩完成后,可以看到压缩包中的文件名称是乱码(文件的内容无乱码问题)。此时只要用蚂蚁中的蚂蚁罐子中的类(org。阿帕奇。工具。拉链。zip条目;org。阿帕奇。工具。拉链。zip输出流;)就可以解决此问题。
2、蚂蚁罐子依赖
!蚂蚁罐子用于解决文件解压缩乱码问题-
属国
groupIdant/groupId
工件id/工件id
版本1 .6 .5/版本
/依赖关系二、JAVA实现ZIP压缩源代码
导入Java。io。文件;
导入Java。io。文件输入流;
导入Java。io。filenotfoundexception
导入Java。io。文件输出流;
导入Java。io。io异常;
导入Java。io。输出流;
导入org。阿帕奇。工具。拉链。zip条目;
导入组织。阿帕奇。工具。拉链。zip输出流;
导入org。slf4j。记录者;
导入org。SLF 4j。伐木工厂;
/**
* zip压缩工具包
* @Class ZipUtils
*/
公共类ZipUtils {
私有最终静态记录器记录器=记录器工厂。获取日志程序(zip实用程序。类);
私有静态最终int BUFFER _ SIZE=2 * 1024
/**
* 压缩成活力
* @param srcFilePath压缩文件路径
* @param tarFilePath目标活力输出路径
* @param KeepDirStructure是否保留原来的目录结构,真:保留目录结构;
*错误:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
* @抛出异常压缩失败会抛出异常
*/
公共静态布尔toZip(String srcFilePath,String tarFilePath,boolean KeepDirStructure)引发异常{
布尔is压缩成功=假;
长启动=系统。当前时间毫秒();
FileOutputStream fos=null
ZipOutputStream zos=null
尝试{
文件源文件=新文件(srcFilePath);
如果(!sourceFile.exists()) {
引发新的FileNotFoundException(“待压缩文件[ srcFilePath ]不存在。);
}
fos=新文件输出流(新文件(tarfile路径));
zos=new ZipOutputStream(fos);
//设置压缩的编码,解决压缩路径中的中文乱码问题
zos。设置编码(“UTF-8”);
compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);
isCompressSuccess=true
长端=系统。当前时间毫秒();
logger.info(【文件压缩】 压缩完成,耗时:{} ms ,(end-start));
} catch(异常e) {
logger.error(【文件压缩】 压缩失败,e);
抛出新的RuntimeException(文件压缩失败,e);
}最后{
closeOutPutStream(zos);
收尾输出流(fos);
}
回报是压缩成功;
}
/**
* 递归压缩方法
* @param源文件源文件
* @param zos zip输出流
* @param name压缩后的名称
* @param KeepDirStructure是否保留原来的目录结构,真:保留目录结构;
*错误:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
* @抛出异常
*/
私有静态空的压缩(文件源文件,ZipOutputStream zos,字符串名称,布尔KeepDirStructure)
引发异常{
字节[]缓冲区=新字节[BUFFER _ SIZE];
if (sourceFile.isFile()) {
//向活力输出流中添加一个活力实体,构造器中名字为活力实体的文件的名字
zos.putNextEntry(新zip条目(名称));
//复制文件到活力输出流中
int len
file inputstream in=新文件inputstream(源文件);
while ((len=in.read(buf))!=-1) {
zos.write(buf,0,len);
}
zos . close entry();
in . close();
}否则{
file[]list files=source file . list files();
if(list files==null list files . length==0){
//当需要保持原来的文件结构时,需要对空文件夹进行处理。
if (KeepDirStructure) {
//空文件夹的处理
zos.putNextEntry(新ZipEntry(名称/));
//没有文件,不需要文件的副本。
zos . close entry();
}
}否则{
for(文件文件:列表文件){
//确定是否需要保留原文件结构。
if (KeepDirStructure) {
//注意:file.getName()前面需要有父文件夹的名称加一个斜杠,
//否则最终的压缩包中不能保留原来的文件结构,即所有文件都运行到压缩包的根目录。
compress(file,zos,name / file.getName(),KeepDirStructure);
}否则{
compress(file,zos,file.getName(),KeepDirStructure);
}
}
}
}
}
/**
*释放资源
* @Title closeOutPutStream
* @参数操作
* @返回void
*/
公共静态void close output stream(output stream ops){
如果(ops!=null) {
尝试{
ops . close();
} catch(IOException ex) {
Logger.error(未能关闭输出流,例如);
}
}
}
}推荐教程:《JAVA视频教程》以上表示java实现zip压缩。中文文件名乱码怎么办?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。