`

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多层目录文件(需ant.jar

    ### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....

    zip解压缩乱码的解决方案

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

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

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

    JAVA 上传ZIP,RAR文件并解压

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

    ICSharpCode.SharpZipLib压缩解决中文乱码dll和代码

    - 当从ZIP文件中提取文件时,确保文件名的解码与压缩时的编码一致,否则仍可能出现乱码。 - 如果ZIP文件包含多级目录,且目录名包含中文,需要对整个路径进行正确的编码和解码。 - 在读写文件内容时,要根据实际...

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

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

    Java实现的带密码压缩与解压zip文件源码

    本项目专注于使用Java实现带密码保护的ZIP文件的压缩和解压功能。这是一项安全措施,允许用户对敏感文件进行加密,以防止未经授权的访问。 在Java中,我们可以利用`java.util.zip`包提供的类来实现这一目标。`...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...

    Java中压缩与解压--中文文件名乱码解决办法

    ### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...

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

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

    Java解压zip文件完整代码分享

    在Java编程中,解压ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包或软件部署时。Apache Commons Compress库提供了方便的API来处理各种压缩格式,包括ZIP。以下是一个详细的Java解压ZIP文件的代码示例,...

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

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

    java将文件夹压缩成zip,解压zip压缩包

    本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...

    Java解压ZIP和RAR格式文件_所需资源.rar

    总结来说,Java中解压ZIP文件主要依赖`java.util.zip`包,而RAR文件则需要借助如Apache Commons Compress这样的第三方库。解压过程涉及到读取压缩文件流,创建文件或目录,以及将数据从输入流复制到输出流。这两个...

    java解压ZIP文件

    ### Java 解压ZIP文件知识点详解 #### 一、概述 在Java编程中,解压缩ZIP文件是一项常见的任务,尤其在处理归档文件或备份时。本文将深入探讨如何使用Java来解压ZIP文件,并通过一个具体的示例代码来展示整个过程。...

    JAVA_解压ZIP.txt

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

    Java通用解压代码(RAR5,Zip,7Z)

    在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...

    解压文件时中文乱码问题处理

    本文将详细探讨如何在使用7-Zip软件解压文件时解决中文乱码问题,以及如何在C#编程环境中处理这一问题。 首先,我们需要了解乱码产生的原因。中文乱码通常是因为字符编码不一致导致的。当压缩文件创建时采用了一种...

    一个简单的Java解压Zip工程

    这个“一个简单的Java解压Zip工程”显然提供了如何使用Java API来解压ZIP文件的示例。下面我们将深入探讨Java ZIP API以及如何实现解压过程。 1. **Java ZIP API**: Java标准库中的`java.util.zip`包提供了解压和...

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

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

Global site tag (gtag.js) - Google Analytics