`

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

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

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

    zip解压缩乱码的解决方案

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

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

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

    java解压ZIP包代码

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

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

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

    Java压缩解压ZIP之Zip4j

    Java中的压缩和解压操作是常见的文件处理任务,Zip4j是一个非常实用的Java库,专为处理ZIP文件而设计。这个库提供了丰富的API,使得开发者可以方便地创建、读取、更新和解压ZIP文件。这篇博客文章“Java压缩解压ZIP...

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

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

    一个简单的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中的方法,即可实现压缩文件,并保证没有中文乱码...

    java解压zip或rar压缩文件源码和jar包

    本篇文章将详细介绍如何在Java中实现zip和rar文件的解压,以及相关的源码和jar包资源。 首先,我们要知道Java标准库提供了`java.util.zip`包,用于处理zip格式的文件。以下是一个简单的Java代码示例,展示如何解压...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    使用java代码替换zip内的文件.docx

    在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...

    文件解压和压缩 解决中文乱码

    在Java标准库中,我们可以使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`来实现ZIP文件的解压。例如,你可以创建一个`ZipInputStream`对象,然后通过循环读取每个`ZipEntry`,将其写入目标文件系统。在处理...

    java实现的解压与压缩 zip和rar类型的

    本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...

    java获取压缩文件的名称并解压

    在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`...

    使用Java向服务器上传文件压缩包并实现解压缩

    Java的标准库`java.util.zip`提供了`ZipInputStream`和`ZipEntry`类来处理ZIP格式的压缩包。通过SFTP连接到服务器,下载压缩包到本地,然后使用这些类进行解压缩: ```java // 下载压缩包到本地 sftpChannel.get(...

    数独游戏 java.zip

    数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip 数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip 数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 ...

    java多重打包解压ZIP文件

    首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`ZipOutputStream`用于创建ZIP文件,`ZipInputStream`用于读取和解压ZIP文件。在打包(压缩)过程中,我们通常会使用`...

    java解压缩zip代码与用到的jar包

    在Java编程语言中,处理压缩文件,如ZIP格式,是一项常见的任务。这通常涉及到压缩文件以节省存储空间,以及解压缩文件以便访问其内容。在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能...

Global site tag (gtag.js) - Google Analytics