import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;
/**
* Utility to Zip and Unzip nested directories recursively.
*
* @author Robin Spark
*/
public class ZipUtils {
/**
* Creates a zip file at the specified path with the contents of the
* specified directory. NB:
*
* @param sourceDirectoryPath
* The path of the directory where the archive will be created.
* eg. c:/temp
* @param targetZipFilePath
* The full path of the archive to create. eg.
* c:/temp/archive.zip
* @throws IOException
* If anything goes wrong
*/
public static void createZip(
String sourceDirectoryPath,
String targetZipFilePath) throws IOException
{
FileOutputStream fOut = null;
BufferedOutputStream bOut = null;
ZipArchiveOutputStream tOut = null;
try {
fOut = new FileOutputStream(new File(targetZipFilePath));
bOut = new BufferedOutputStream(fOut);
tOut = new ZipArchiveOutputStream(bOut);
addFileToZip(tOut, sourceDirectoryPath, "");
} finally {
tOut.finish();
tOut.close();
bOut.close();
fOut.close();
}
}
public static void createZip(
List<File> fileList,
String targetZipFilePath) throws IOException
{
FileOutputStream fOut = null;
BufferedOutputStream bOut = null;
ZipArchiveOutputStream tOut = null;
try {
fOut = new FileOutputStream(new File(targetZipFilePath));
bOut = new BufferedOutputStream(fOut);
tOut = new ZipArchiveOutputStream(bOut);
addFileToZip(tOut, fileList);
} finally {
tOut.finish();
tOut.close();
bOut.close();
fOut.close();
}
}
public static void createZip(
Map<String, File> fileMap,
String targetZipFilePath) throws IOException
{
FileOutputStream fOut = null;
BufferedOutputStream bOut = null;
ZipArchiveOutputStream tOut = null;
try {
fOut = new FileOutputStream(new File(targetZipFilePath));
bOut = new BufferedOutputStream(fOut);
tOut = new ZipArchiveOutputStream(bOut);
addFileToZip(tOut, fileMap);
} finally {
tOut.finish();
tOut.close();
bOut.close();
fOut.close();
}
}
private static void addFileToZip(
ZipArchiveOutputStream zOut,
List<File> fileList) throws IOException
{
for (File f : fileList) {
String entryName = f.getName();
ZipArchiveEntry zipEntry = new ZipArchiveEntry(f, entryName);
zOut.putArchiveEntry(zipEntry);
FileInputStream fInputStream = null;
try {
fInputStream = new FileInputStream(f);
IOUtils.copy(fInputStream, zOut);
zOut.closeArchiveEntry();
} catch (Exception e) {
e.printStackTrace();
} finally {
fInputStream.close();
}
}
}
private static void addFileToZip(
ZipArchiveOutputStream zOut,
Map<String, File> fileMap) throws IOException
{
for (Entry<String, File> entry : fileMap.entrySet()) {
String entryName = entry.getKey();
File f = entry.getValue();
ZipArchiveEntry zipEntry = new ZipArchiveEntry(f, entryName);
zOut.putArchiveEntry(zipEntry);
FileInputStream fInputStream = null;
try {
fInputStream = new FileInputStream(f);
IOUtils.copy(fInputStream, zOut);
zOut.closeArchiveEntry();
} catch (Exception e) {
e.printStackTrace();
} finally {
fInputStream.close();
}
}
}
/**
* Creates a zip entry for the path specified with a name built from the
* base passed in and the file/directory name. If the path is a directory, a
* recursive call is made such that the full directory is added to the zip.
*
* @param zOut
* The zip file's output stream
* @param path
* The filesystem path of the file/directory being added
* @param base
* The base prefix to for the name of the zip file entry
*
* @throws IOException
* If anything goes wrong
*/
private static void addFileToZip(
ZipArchiveOutputStream zOut,
String path,
String base) throws IOException
{
File f = new File(path);
String entryName = base + f.getName();
ZipArchiveEntry zipEntry = new ZipArchiveEntry(f, entryName);
zOut.putArchiveEntry(zipEntry);
if (f.isFile()) {
FileInputStream fInputStream = null;
try {
fInputStream = new FileInputStream(f);
IOUtils.copy(fInputStream, zOut);
zOut.closeArchiveEntry();
} finally {
fInputStream.close();
}
} else {
zOut.closeArchiveEntry();
File[] children = f.listFiles();
if (children != null) {
for (File child : children) {
addFileToZip(zOut, child.getAbsolutePath(), entryName + "/");
}
}
}
}
/**
* Method for testing zipping and unzipping.
*
* @param args
*/
public static void main(
String[] args) throws IOException
{
// ZipUtils.createZip("c:/MyFile", "C:/解压缩MyFile-123.zip");
// List<File> fileList = new ArrayList<File>();
//
// fileList.add(new File("C:\\MyFile\\spy.log"));
//
// fileList.add(new File("C:\\MyFile\\中华人民共和国.log"));
Map<String, File> fileMap = new HashMap<String, File>();
fileMap.put("xxx.TXT", new File("C:\\MyFile\\spy.log"));
fileMap.put("yyy.LOG", new File("C:\\MyFile\\中华人民共和国.log"));
ZipUtils.createZip(fileMap, "C:/解压缩MyFile-12345.zip");
System.out.println("Done...");
}
}
相关推荐
Java-unrar-0.3.zip 是一个专门为Java开发者设计的RAR文件解压缩工具包,它允许程序员在Java环境中处理RAR格式的压缩文件,而无需在系统中安装WinRAR这样的外部软件。这个工具包的主要功能是提供API接口,使得Java...
用户只需解压缩文件,然后按照安装指南运行Eclipse可执行文件,即可开始使用。 总之,Eclipse Java 2019-03-R-win32-x86_64是一个适合Windows 32位系统的强大开发工具,由于其易用性、灵活性和强大的功能,被许多...
在Java编程环境中,处理文件的压缩与解压缩是一项常见的任务,尤其在数据传输、存档或备份场景下。本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,...
例如,如果你正在开发一个需要处理用户上传RAR文件的服务,可以使用`java-unrar`来解压缩文件,然后通过`commons-logging`记录解压过程中的信息,包括成功、错误或警告消息。这样不仅能够高效地完成任务,还能在出现...
3. **解压缩文件**:`ZipInputStream`则用于读取ZIP文件并解压缩。你需要创建一个`ZipInputStream`实例,然后循环调用`getNextEntry`获取每个ZIP条目,创建对应的文件或目录,并将条目的内容写入新文件。 4. **GZIP...
这个压缩包"JAVA代码实例-文件压缩与解压缩实践(源代码+论文).rar"提供了关于如何使用Java进行文件压缩与解压缩的实践案例,这对于学习Java的开发者,尤其是进行毕业设计或者软件插件开发的学生来说,是非常宝贵的...
Java解压缩文件是Java开发中常见的一项操作,特别是在处理数据传输、软件安装包或资源包时。本篇文章将深入探讨如何使用Java进行文件的解压缩,以及相关工具和源码的使用。 首先,Java标准库提供了`java.util.zip`...
Java-unrar-src-0.3 是一个开源项目,专门用于在Java环境中解压缩RAR文件,它提供了对RAR格式的支持,使得开发者能够在不依赖外部库或WinRAR程序的情况下处理RAR档案。这个项目对于那些需要在纯Java环境中处理RAR...
本话题我们将深入探讨“Java解压缩助手”的相关知识,这个工具可能是一个用于处理ZIP压缩文件的实用程序,可以帮助开发者高效地进行文件的压缩与解压操作。 在Java中,处理ZIP文件主要依赖于java.util.zip包中的类...
在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件...在开发过程中,确保代码的健壮性和灵活性,同时考虑性能优化,例如批量解压缩、多线程处理等,将使你的程序更加高效和实用。
Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化和备份场景下。本实践项目提供了源代码和相关论文,帮助开发者深入理解这一主题。在Java中,我们可以利用内置的`java.util.zip`包来实现...
在Linux环境下,下载的"java-jdk-8u261-linux-x64.zip"是一个ZIP压缩文件,需要先使用解压命令将其解压缩。例如,可以使用`unzip java-jdk-8u261-linux-x64.zip`命令,将内容解压到当前目录。解压后,通常会得到一个...
这个毕业设计项目专注于使用Java实现文件的压缩与解压缩功能,对于学习Java编程和理解数据压缩原理的学生来说,是一个非常实用的实践案例。下面我们将深入探讨相关的知识点。 首先,我们要了解文件压缩的基本原理。...
Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...
10. **解压缩源码分析**:在提供的"java实现压缩与解压缩源码,demo分享.pdf"文件中,你可以找到具体的实现细节,包括如何打开和关闭流,如何处理文件条目,以及如何管理内存缓冲区等。 通过理解和应用这些知识点,...
本主题聚焦于“7z解压缩java代码+工具”,它涉及到使用Java编程语言实现对7z、tar、gz等压缩格式的支持。下面我们将深入探讨相关知识点。 首先,7z是一种高效的压缩格式,由7-Zip软件创建,它提供了比常见的ZIP或...
在软件开发领域,尤其是对于处理文件压缩与解压缩的应用场景中,Java 提供了丰富的工具和库来支持这类操作。本篇文章将详细解析一个具体的 Java 示例代码,该示例展示了如何使用 `java-unrar` 库来解压 WinRAR 文件...
总之,Java文件压缩与解压缩实践项目通过源代码展示了如何利用Java内置API进行文件和目录的压缩与解压缩,同时也为开发者提供了一个学习和参考的平台,有助于提升Java开发者的实用技能。通过深入研究这些示例,...