最近项目需要解析接口过来的日志文件,日志文件采用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压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...
`java.util.zip`库是Java标准库的一部分,提供了对ZIP文件的支持,但是默认可能不支持中文文件名的正确解压。本篇文章将详细讲解如何在Java中处理包含中文文件名的ZIP压缩包,并使用Apache Ant工具(ant.jar)来辅助...
java压缩解压ZIP
以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...
本文将深入探讨如何在Java中解压Zip格式的文件。 首先,Java标准库提供了`java.util.zip`包,该包包含了处理Zip文件所需的基本类。其中,`ZipInputStream`用于读取Zip文件,而`ZipEntry`表示Zip文件中的单个条目...
- 对于开发者,可以编写自定义的解压脚本,通过编程语言(如Python、Java)来读取ZIP文件内容,识别并转换文件名的编码后再解压。这种方法适用于需要批量处理和二次开发的情况。 6. **预防措施** - 在创建ZIP文件...
对于上传RAR和ZIP文件的解压,Java标准库提供了`java.util.zip`包,包含`ZipInputStream`和`ZipFile`类来处理ZIP文件,而RAR文件则需要第三方库如Apache Commons Compress。下面是一个解压ZIP文件的例子: ```java ...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
在Java编程环境中,解压ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包或系统集成时。本实例将向你展示如何使用Java API来实现这一功能。请注意,这个过程假设你的ZIP文件是通过正常的方式创建的,即使用...
压缩包--Java解压zip文件完整代码分享,使用java代码完成解压zip文件
本项目专注于使用Java实现带密码保护的ZIP文件的压缩和解压功能。这是一项安全措施,允许用户对敏感文件进行加密,以防止未经授权的访问。 在Java中,我们可以利用`java.util.zip`包提供的类来实现这一目标。`...
本文将深入探讨如何使用Java来解压ZIP格式的压缩包,并提供相关的源码参考。 首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`...
Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...
默认情况下,Java的ZIP处理可能不支持GBK或UTF-8等非ASCII编码,这可能导致中文文件名解压后乱码。为了解决这个问题,我们需要在创建`ZipInputStream`时指定合适的编码。例如,如果ZIP文件内的文件名使用的是GBK编码...
本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
在Java编程中,处理压缩文件,特别是包含中文文件名的ZIP文件时,常常会遇到乱码问题。这是因为Java默认的字符编码与ZIP文件中的编码不一致导致的。本篇文章将详细探讨如何解决Java解压ZIP文件时遇到的中文名称问题...
Java中的压缩和解压操作是常见的文件处理任务,Zip4j是一个非常实用的Java库,专为处理ZIP文件而设计。这个库提供了丰富的API,使得开发者可以方便地创建、读取、更新和解压ZIP文件。这篇博客文章“Java压缩解压ZIP...
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包