广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java文件压缩乱码解决方法
  • 665
分享到

java文件压缩乱码解决方法

java乱码 2021-05-16 10:05:36 665人浏览 才女
摘要

一、文件压缩的中文乱码问题中文文件名的乱码解决对于压缩的文件,当文件名称是中文时,若使用jdk api中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完

一、文件压缩的中文乱码问题

中文文件名的乱码解决

对于压缩的文件,当文件名称是中文时,若使用jdk api中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完成后,可以看到压缩包中的文件名称是乱码(文件的内容无乱码问题)。

此时只要用ANT中的ant.jar中的类(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)就可以解决此问题。

推荐:java视频教程

ant.jar依赖



    ant
    ant
    1.6.5

二、JAVA实现ZIP压缩源代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ZipUtils {

    private final static Logger logger = LoggerFactory.getLogger(ZipUtils.class);

    private static final int BUFFER_SIZE = 2 * 1024;

    
    public static boolean toZip(String srcFilePath, String tarFilePath, boolean KeepDirStructure) throws Exception {
        boolean isCompressSuccess = false;
        long start = System.currentTimeMillis();
        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        try {
            File sourceFile = new File(srcFilePath);
            if (!sourceFile.exists()) {
                throw new FileNotFoundException("待压缩文件 [" + srcFilePath + "]不存在.");
            }
            fos = new FileOutputStream(new File(tarFilePath));
            zos = new ZipOutputStream(fos);
            // 设置压缩的编码,解决压缩路径中的中文乱码问题
            zos.setEncoding("UTF-8");            
            compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);
            isCompressSuccess = true;
            long end = System.currentTimeMillis();
            logger.info("【文件压缩】 压缩完成,耗时:{} ms", (end - start));
        } catch (Exception e) {
            logger.error("【文件压缩】 压缩失败", e);
            throw new RuntimeException("文件压缩失败", e);
        } finally {
            closeOutPutStream(zos);
            closeOutPutStream(fos);
        }
        return isCompressSuccess;
    }

    
    private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure)
            throws Exception {
        byte[] buf = new byte[BUFFER_SIZE];
        if (sourceFile.isFile()) {
            // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
            zos.putNextEntry(new ZipEntry(name));
            // copy文件到zip输出流中
            int len;
            FileInputStream in = new FileInputStream(sourceFile);
            while ((len = in.read(buf)) != -1) {
                zos.write(buf, 0, len);
            }
            zos.closeEntry();
            in.close();
        } else {
            File[] listFiles = sourceFile.listFiles();
            if (listFiles == null || listFiles.length == 0) {
                // 需要保留原来的文件结构时,需要对空文件夹进行处理
                if (KeepDirStructure) {
                    // 空文件夹的处理
                    zos.putNextEntry(new ZipEntry(name + "/"));
                    // 没有文件,不需要文件的copy
                    zos.closeEntry();
                }
            } else {
                for (File file : listFiles) {
                    // 判断是否需要保留原来的文件结构
                    if (KeepDirStructure) {
                        // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
                        // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
                        compress(file, zos, name + "/" + file.getName(), KeepDirStructure);
                    } else {
                        compress(file, zos, file.getName(), KeepDirStructure);
                    }
                }
            }
        }
    }

    
    public static void closeOutPutStream(OutputStream ops) {
        if (ops != null) {
            try {
                ops.close();
            } catch(IOException ex) {
                logger.error("关闭输出流失败", ex);
            }
        }
    }

}

更多java知识请关注Java基础教程栏目。

--结束END--

本文标题: java文件压缩乱码解决方法

本文链接: https://www.lsjlt.com/news/1980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java文件压缩乱码解决方法
    一、文件压缩的中文乱码问题中文文件名的乱码解决对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完...
    99+
    2021-05-16
    java 乱码
  • java中zip压缩乱码解决方法(附代码)
    用java来打包文件生成压缩文件,有两个地方会出现乱码(推荐:java基础教程)内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码;使用开源的类库org.apache.tools.zip.ZipOutputStre...
    99+
    2020-12-29
    java
  • java压缩文件乱码问题
    用java来打包文件生成压缩文件,有两个地方会出现乱码:内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry...
    99+
    2019-05-09
    java 乱码
  • php压缩文件时文件夹乱码如何解决
    本篇内容介绍了“php压缩文件时文件夹乱码如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php压缩文件时文件夹乱码的解决办法:1、修...
    99+
    2023-07-04
  • java zip压缩乱码原因与解决方法介绍
    java zip压缩乱码的原因与解决方法:(推荐:java视频教程)运行环境Jdk 1.5,win 7中文版JDK1.5中有zip压缩相关的API,在java.util.zip包下面。正常情况下,使用JDK自带的API把目录(文件)压缩成z...
    99+
    2015-12-05
    java
  • java中解压乱码解决方法
    第一种使用ant实现的zip解压缩,其中解压的乱码注意使用public void unZip(String unZipFileName,String outputPath) 其中this.zipFile = new ZipFile(unZi...
    99+
    2020-06-12
    java
  • Python压缩解压缩zip文件及破解zip文件密码的方法
    python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py脚本所在目录中,有如下文件: readability/readability.js readability...
    99+
    2022-06-04
    文件 解压缩 密码
  • java文件名中文乱码解决方法
    JAVA文件下载时乱码有两种情况:(推荐:java视频教程)1,下载时中文文件名乱码2,下载时因为路径中包含中文文件名乱码,提示找不到文件解决方法见下面部分代码response.setContentType("multipart/form-...
    99+
    2019-04-23
    java
  • java文件出现乱码解决方法
    做java开发的过程中由于编码问题打开项目发现里面的中文都是乱码,这种情况我们可以在eclipse中设置对应的编码显示,或者把项目里的java文件都转为支持的编码就好了。解决方法:首先我们可以打开工具菜单“Project”--“Proper...
    99+
    2019-06-07
    java 乱码
  • java文件下载乱码解决方法
    java文件下载出现中文乱码解决方法: String userAgent = request.getHeader("User-Agent"); String formFileName = file.getFileName(); ...
    99+
    2014-10-17
    java基础 java
  • 怎么解决php压缩中文乱码问题
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。怎么解决php压缩中文乱码问题?解决php使用ZipArchive解压时中文乱码问题(纯php,绕开ZipArchive)解决php使用ZipArchive解压时中文...
    99+
    2022-11-14
  • php压缩中文乱码问题如何解决
    这篇“php压缩中文乱码问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php压缩中文乱码问题如何解决”文章吧。p...
    99+
    2023-07-04
  • Java压缩与解压缩ZIP文件
    文章目录 前言Java解压缩文件压缩和解压缩ZIP文件检验应用总结 前言 在现代计算机上,数据传输和存储越来越依赖于文件压缩技术。当我们需要发送大量数据时,压缩文件可以大大减少传输时间...
    99+
    2023-09-11
    java zip 压缩文件 解压缩文件 ZipOutputStream
  • Ubuntu压缩和解压缩RAR文件的方法
    本篇内容主要讲解“Ubuntu压缩和解压缩RAR文件的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu压缩和解压缩RAR文件的方法”吧!方法很简单,一条命令就搞定了:sudo ap...
    99+
    2023-06-13
  • java下载文件文件名乱码解决方法
    在进行文件下载的时候出现中文名称乱码,显示不出来:response.setHeader(“Content-Disposition”, “filename=自定义的名称.jpg” )解决办法对中文名称进行编码处理:String fileNam...
    99+
    2016-09-26
    java 乱码
  • java读取txt文件乱码解决方法
    java读取txt文件,如果编码格式不匹配,就会出现乱码现象。所以读取txt文件的时候需要设置读取编码。txt文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,在按此格式读取文件就不会产生乱码了。(推荐:jav...
    99+
    2016-06-11
    java
  • java读文件乱码解决方法介绍
    使用java读取磁盘文件内容容易出现乱码, 问题是由于java使用的编码和被读取文件的编码不一致导致的。(推荐:java视频教程)假设有一个test.txt的文本文件,文件内容为:“测试java读取中文字符串乱码问题”, 其中包含中文,文件...
    99+
    2020-03-06
    java 乱码
  • java读写html文件乱码解决方法
    JAVA读取文件,避免中文乱码。 public static String readFile(String filePathAndName) { String fileContent = ""; try { File f =...
    99+
    2015-05-06
    java 乱码
  • java文字乱码解决方法
    在myeclipse中可以设置文件的编码格式,但是当我们使用Scanner进行键入时,由于Windows使用的是GBK编码,所以如果设置的编码格式不是GBK的话会出现中文乱码问题。前台页面向后台发送请求时如果是get方式,会默认以ISO88...
    99+
    2015-09-19
    java 乱码
  • java邮件乱码解决方法
    java发送邮件乱码解决方法://设置邮件主题 message.setSubject(MimeUtility.encodeText(mail_subject,MimeUtility.mimeCharset("gb2312"), null...
    99+
    2017-11-09
    java 乱码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作