java解压zip中文乱码,zip压缩文件名字乱码

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: