public class ZipUtil {
Logger logger = Logger.getLogger(ZipUtil.class);
/** Constants for mode listing or mode extracting. */
public static final int LIST = 0, EXTRACT = 1;
/** Whether we are extracting or just printing TOC */
protected int mode = LIST;
/** The ZipFile that is used to read an archive */
protected ZipFile zippy;
/** The buffer for reading/writing the ZipFile data */
protected byte[] b;
private String unzipFileTargetLocation;
public ZipUtil() {
b = new byte[8092];
}
/** Set the Mode (list, extract). */
public void setMode(int m) {
if (m == LIST || m == EXTRACT)
mode = m;
}
/** Cache of paths we've mkdir()ed. */
protected SortedSet dirsMade;
/**
* For a given Zip file, process each entry.
*
* @param fileName
* unzip file name
* @param unZipTarget
* location for unzipped file
*/
public void unZip(String fileName, String unZipTarget) {
this.unzipFileTargetLocation = unZipTarget;
dirsMade = new TreeSet();
try {
zippy = new ZipFile(fileName);
Enumeration all = zippy.entries();
while (all.hasMoreElements()) {
getFile((ZipEntry) all.nextElement());
}
} catch (IOException err) {
logger.error("IO Error: " + err);
return;
}
}
protected boolean warnedMkDir = false;
/**
* Process one file from the zip, given its name. Either print the name, or
* create the file on disk.
*/
protected void getFile(ZipEntry e) throws IOException {
String zipName = e.getName();
switch (mode) {
case EXTRACT:
if (zipName.startsWith("/")) {
if (!warnedMkDir)
System.out.println("Ignoring absolute paths");
warnedMkDir = true;
zipName = zipName.substring(1);
}
// if a directory, just return. We mkdir for every file,
// since some widely-used Zip creators don't put out
// any directory entries, or put them in the wrong place.
if (zipName.endsWith("/")) {
return;
}
// Else must be a file; open the file for output
// Get the directory part.
int ix = zipName.lastIndexOf('/');
if (ix > 0) {
String dirName = zipName.substring(0, ix);
String fileName=zipName.substring(ix+1,zipName.length());
zipName=fileName;
}
logger.debug("Creating " + zipName);
String targetFile = this.unzipFileTargetLocation;
File file=new File(targetFile);
if(!file.exists())
file.createNewFile();
FileOutputStream os = new FileOutputStream(targetFile);
InputStream is = zippy.getInputStream(e);
int n = 0;
while ((n = is.read(b)) > 0)
os.write(b, 0, n);
is.close();
os.close();
break;
case LIST:
// Not extracting, just list
if (e.isDirectory()) {
logger.info("Directory " + zipName);
} else {
logger.info("File " + zipName);
}
break;
default:
throw new IllegalStateException("mode value (" + mode + ") bad");
}
}
/**
* unzip zip file with
*
* @param unZipFile,and
* save unzipped file to
* @param saveFilePath
* @param unZipFile
* full file path,like 'd:\temp\test.zip'
* @param saveFilePath
* full file path,like 'd:\temp\test.kml'
* @return
*/
public static boolean unzip(String unZipFile, String saveFilePath) {
boolean succeed = true;
ZipInputStream zin = null;
ZipEntry entry;
try {
// zip file path
File olddirec = new File(unZipFile);
zin = new ZipInputStream(new FileInputStream(unZipFile));
// iterate ZipEntry in zip
while ((entry = zin.getNextEntry()) != null) {
// if folder,create it
if (entry.isDirectory()) {
File directory = new File(olddirec.getParent(), entry
.getName());
if (!directory.exists()) {
if (!directory.mkdirs()) {
System.out.println("Create foler in "
+ directory.getAbsoluteFile() + " failed");
}
}
zin.closeEntry();
}
// if file,unzip it
if (!entry.isDirectory()) {
File myFile = new File(saveFilePath);
FileOutputStream fout = new FileOutputStream(myFile);
DataOutputStream dout = new DataOutputStream(fout);
byte[] b = new byte[1024];
int len = 0;
while ((len = zin.read(b)) != -1) {
dout.write(b, 0, len);
}
dout.close();
fout.close();
zin.closeEntry();
}
}
} catch (IOException e) {
e.printStackTrace();
succeed = false;
System.out.println(e);
} finally {
if (null != zin) {
try {
zin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (succeed)
System.out.println("File unzipped successfully!");
else
System.out.println("File unzipped with failure!");
return succeed;
}
/**
* @param args
*/
public static void main(String[] args) {
String unzipfile = "c:\\data\\kml\\aa.zip"; // 解压缩的文件名
String saveTo = "d:\\temp\\xxx.xml";
boolean success = ZipUtil.unzip(unzipfile, saveTo);
if (success)
System.out.println("File ");
}
分享到:
相关推荐
二、Java Zip解压缩 2. 使用`ZipInputStream`类进行解压缩: `ZipInputStream`类可以从输入流中读取Zip文件内容。以下是一个解压缩Zip文件到指定目录的示例: ```java import java.io.*; import java.util.zip.*; ...
java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...
Java工具类ZIP解压缩Java工具类ZIP解压缩Java工具类ZIP解压缩
这是使用java 编写的一个zip解压缩工具,既可以解压缩zip包,也可以把目录打包成为zip压缩包. 源代码下载地址: http://pan.baidu.com/s/1c0EJrlm
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
解压缩ZIP文件则可以使用`org.apache.commons.compress.archivers.zip.ZipArchiveInputStream`类。同样,我们需要设置正确的编码来正确读取中文文件名: ```java import org.apache.commons.compress.archivers.zip...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。
首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩文件。在Java中,我们通常使用`ZipOutputStream`来创建ZIP文件,`ZipInputStream`来读取和解压缩...
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...
接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...
在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能需要用到的第三方库。 首先,Java标准库(Java Standard Library)自身提供了对ZIP文件的支持。在`java.util.zip`包中,有两个关键类用于...
首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`ZipInputStream`和`ZipEntry`这两个类。`ZipInputStream`是用于读取ZIP文件的输入流...
### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...
本文将深入探讨如何使用`zip4j`库来实现带密码的ZIP文件压缩与解压缩,该库支持中文文件名,并且具有良好的密码保护功能。 `zip4j`是一个强大的Java库,它提供了丰富的API来处理ZIP文件,包括添加、删除、提取文件...
在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...
对于解压缩,同样需要处理编码问题。可以使用`ZipEntry`的`setName()`方法来设定文件名的编码: ```java ZipInputStream zis = new ZipInputStream(new FileInputStream("input.zip")); ZipEntry entry; while (...
zip解压缩文件文件夹都可以,代码清晰,注释多。非常容易看懂
JDK11 Windows Zip解压缩版是开发者在Windows环境下快速启动Java开发的便捷方式。其带来的新特性和改进对于提升开发效率和代码质量都有显著帮助。通过简单的解压和环境变量配置,开发者就能轻松地在Windows系统上...