`

JAVA解压zip包中文乱码

阅读更多

最近项目需要解析接口过来的日志文件,日志文件采用zip打包方式传递过来,zip包的内的文件名包含中文。

 

刚开始采用的java.util下的zip包进行解压,发现路径中文乱码,代码如下:

/**
	 * 解压文件到指定目录
	 * 
	 * @param zipFile zip文件
	 * @param descDir 输出目录
	 * @author lee
	 */
	@SuppressWarnings("rawtypes")
	public static void unZipFiles(File zipFile, String descDir)
			throws IOException {
		File pathFile = new File(descDir);
		if (!pathFile.exists()) {
			pathFile.mkdirs();
		}
		ZipFile zip = new ZipFile(zipFile);
		for (Enumeration entries = zip.entries(); entries.hasMoreElements();) {
			ZipEntry entry = (ZipEntry) entries.nextElement();
			String zipEntryName = entry.getName();
			InputStream in = zip.getInputStream(entry);
			String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");
			;
			// 判断路径是否存在,不存在则创建文件路径
			File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
			if (!file.exists()) {
				file.mkdirs();
			}
			// 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
			if (new File(outPath).isDirectory()) {
				continue;
			}
			// 输出文件路径信息
			System.out.println(outPath);

			OutputStream out = new FileOutputStream(outPath);
			byte[] buf1 = new byte[1024];
			int len;
			while ((len = in.read(buf1)) > 0) {
				out.write(buf1, 0, len);
			}
			in.close();
			out.close();
		}
		zip.close();
	}

 在网上查阅相关资料,java.uil下的zip处理类不包含中文名字的兼容,需要采用ant包下的apache.tools工具进行解析,代码如下:

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.xml.sax.SAXException;

import java.io.*;
import java.util.*;


public class ZipUtils {

  

    /**
     * 解析附件zip包
     * @param unZipFileName 解压的zip文件
     * @param outputDirectory 输出目录
     * @throws StrategyException
     */
    public static void unZip(String unZipFileName,String outputDirectory) throws StrategyException {
        FileOutputStream fileOut = null;
        InputStream inputStream = null;
        ZipFile zipFile = null;
        int readedBytes;
        try{

            //创建输出目录
            File outputDirFile = new File(outputDirectory);
            if(!outputDirFile.exists()){
                outputDirFile.mkdir();
            }

            if(System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0){
                zipFile = new ZipFile(unZipFileName,"GBK");
            }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0){
                zipFile = new ZipFile(unZipFileName,"UTF-8");
            }
            for(Enumeration entries = zipFile.getEntries();entries.hasMoreElements();){

                ZipEntry entry = (ZipEntry)entries.nextElement();

                File f = new File(outputDirectory + File.separator + entry.getName());
                f.createNewFile();

                inputStream = zipFile.getInputStream(entry);
                fileOut = new FileOutputStream(f);
                byte[] buf = new byte[1024];
                while(( readedBytes = inputStream.read(buf) ) > 0){
                    fileOut.write(buf , 0 , readedBytes );
                }

            }
        }catch(Exception e){
            e.printStackTrace();
            throw new StrategyException("解析附件失败,请检查压缩包是否损坏!");
        }finally {
            IOUtils.closeQuietly(fileOut);
            IOUtils.closeQuietly(inputStream);
        }
    }


}

 

分享到:
评论

相关推荐

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    解压zip压缩文件,支持多文件目录解压,中文乱码问题

    在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...

    java zip压缩解压工具解决中文乱码问题

    以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...

    java解压zip格式文件

    本文将深入探讨如何在Java中解压Zip格式的文件。 首先,Java标准库提供了`java.util.zip`包,该包包含了处理Zip文件所需的基本类。其中,`ZipInputStream`用于读取Zip文件,而`ZipEntry`表示Zip文件中的单个条目...

    zip解压缩乱码的解决方案

    - 对于开发者,可以编写自定义的解压脚本,通过编程语言(如Python、Java)来读取ZIP文件内容,识别并转换文件名的编码后再解压。这种方法适用于需要批量处理和二次开发的情况。 6. **预防措施** - 在创建ZIP文件...

    JAVA 上传ZIP,RAR文件并解压

    对于上传RAR和ZIP文件的解压,Java标准库提供了`java.util.zip`包,包含`ZipInputStream`和`ZipFile`类来处理ZIP文件,而RAR文件则需要第三方库如Apache Commons Compress。下面是一个解压ZIP文件的例子: ```java ...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    java实现解压zip文件代码实例直接运行

    在Java编程环境中,解压ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包或系统集成时。本实例将向你展示如何使用Java API来实现这一功能。请注意,这个过程假设你的ZIP文件是通过正常的方式创建的,即使用...

    Java解压zip文件完整代码分享,使用java代码完成解压zip文件

    压缩包--Java解压zip文件完整代码分享,使用java代码完成解压zip文件

    JAVA解压ZIP格式的压缩包_java解压缩_zip_

    本文将深入探讨如何使用Java来解压ZIP格式的压缩包,并提供相关的源码参考。 首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`...

    java解压ZIP包代码

    这个类是一个后台自动解压ZIP包的基类程序,只要调用该方法传入参数即可,简单易用

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    Java解压zip,rar,7z的jar包

    在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...

    java解压zip时中文名称解决方法

    在Java编程中,处理压缩文件,特别是包含中文文件名的ZIP文件时,常常会遇到乱码问题。这是因为Java默认的字符编码与ZIP文件中的编码不一致导致的。本篇文章将详细探讨如何解决Java解压ZIP文件时遇到的中文名称问题...

    Java中递归逻辑循环调用解压zip里面所有的压缩包

    Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java zipentry.jar 解决解压失败问题

    这就可能导致在Java中解压包含非ASCII字符(如中文)的ZIP文件时出现问题。 Java的`java.util.zip`包提供了对ZIP文件的支持,包括`ZipInputStream`和`ZipOutputStream`类用于读写ZIP文件,以及`ZipEntry`类来代表...

    JAVA_解压ZIP.txt

    ### JAVA_解压ZIP知识点详解 #### 一、概述 在Java编程中,处理压缩文件是一项常见的需求。本文档详细介绍了如何使用Java语言中的库来解压ZIP格式的文件。此文档不仅提供了一个完整的示例代码,还包含了必要的理论...

    java 解压zip,rar文件

    在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...

    解决java压缩zip文件时的中文乱码问题(包含jar包和工具类)

    解决java压缩zip文件时的中文乱码问题 实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码...

Global site tag (gtag.js) - Google Analytics