最近项目需要解析接口过来的日志文件,日志文件采用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
以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...
- 对于开发者,可以编写自定义的解压脚本,通过编程语言(如Python、Java)来读取ZIP文件内容,识别并转换文件名的编码后再解压。这种方法适用于需要批量处理和二次开发的情况。 6. **预防措施** - 在创建ZIP文件...
在Java编程环境中,解压ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包或系统集成时。本实例将向你展示如何使用Java API来实现这一功能。请注意,这个过程假设你的ZIP文件是通过正常的方式创建的,即使用...
这个类是一个后台自动解压ZIP包的基类程序,只要调用该方法传入参数即可,简单易用
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
Java中的压缩和解压操作是常见的文件处理任务,Zip4j是一个非常实用的Java库,专为处理ZIP文件而设计。这个库提供了丰富的API,使得开发者可以方便地创建、读取、更新和解压ZIP文件。这篇博客文章“Java压缩解压ZIP...
- 当从ZIP文件中提取文件时,确保文件名的解码与压缩时的编码一致,否则仍可能出现乱码。 - 如果ZIP文件包含多级目录,且目录名包含中文,需要对整个路径进行正确的编码和解码。 - 在读写文件内容时,要根据实际...
这个“一个简单的Java解压Zip工程”显然提供了如何使用Java API来解压ZIP文件的示例。下面我们将深入探讨Java ZIP API以及如何实现解压过程。 1. **Java ZIP API**: Java标准库中的`java.util.zip`包提供了解压和...
解决java压缩zip文件时的中文乱码问题 实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码...
本篇文章将详细介绍如何在Java中实现zip和rar文件的解压,以及相关的源码和jar包资源。 首先,我们要知道Java标准库提供了`java.util.zip`包,用于处理zip格式的文件。以下是一个简单的Java代码示例,展示如何解压...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...
在Java标准库中,我们可以使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`来实现ZIP文件的解压。例如,你可以创建一个`ZipInputStream`对象,然后通过循环读取每个`ZipEntry`,将其写入目标文件系统。在处理...
本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...
在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入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中的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`ZipOutputStream`用于创建ZIP文件,`ZipInputStream`用于读取和解压ZIP文件。在打包(压缩)过程中,我们通常会使用`...
在Java编程语言中,处理压缩文件,如ZIP格式,是一项常见的任务。这通常涉及到压缩文件以节省存储空间,以及解压缩文件以便访问其内容。在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能...