`

java解压缩-3-实用

阅读更多

 

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-unrar-0.3.zip 是一个专门为Java开发者设计的RAR文件解压缩工具包,它允许程序员在Java环境中处理RAR格式的压缩文件,而无需在系统中安装WinRAR这样的外部软件。这个工具包的主要功能是提供API接口,使得Java...

    eclipse-java-2019-03-R-win32-x86_64.zip

    用户只需解压缩文件,然后按照安装指南运行Eclipse可执行文件,即可开始使用。 总之,Eclipse Java 2019-03-R-win32-x86_64是一个适合Windows 32位系统的强大开发工具,由于其易用性、灵活性和强大的功能,被许多...

    java文件解压缩工具箱及案例

    在Java编程环境中,处理文件的压缩与解压缩是一项常见的任务,尤其在数据传输、存档或备份场景下。本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,...

    java-unrar-0.3.jar和commons-logging-1.1.1.jar

    例如,如果你正在开发一个需要处理用户上传RAR文件的服务,可以使用`java-unrar`来解压缩文件,然后通过`commons-logging`记录解压过程中的信息,包括成功、错误或警告消息。这样不仅能够高效地完成任务,还能在出现...

    JAVA文件压缩与解压缩实践-project

    3. **解压缩文件**:`ZipInputStream`则用于读取ZIP文件并解压缩。你需要创建一个`ZipInputStream`实例,然后循环调用`getNextEntry`获取每个ZIP条目,创建对应的文件或目录,并将条目的内容写入新文件。 4. **GZIP...

    JAVA代码实例-文件压缩与解压缩实践(源代码+论文).rar

    这个压缩包"JAVA代码实例-文件压缩与解压缩实践(源代码+论文).rar"提供了关于如何使用Java进行文件压缩与解压缩的实践案例,这对于学习Java的开发者,尤其是进行毕业设计或者软件插件开发的学生来说,是非常宝贵的...

    java解压缩文件

    Java解压缩文件是Java开发中常见的一项操作,特别是在处理数据传输、软件安装包或资源包时。本篇文章将深入探讨如何使用Java进行文件的解压缩,以及相关工具和源码的使用。 首先,Java标准库提供了`java.util.zip`...

    java-unrar-src-0.3

    Java-unrar-src-0.3 是一个开源项目,专门用于在Java环境中解压缩RAR文件,它提供了对RAR格式的支持,使得开发者能够在不依赖外部库或WinRAR程序的情况下处理RAR档案。这个项目对于那些需要在纯Java环境中处理RAR...

    Java 解压缩助手

    本话题我们将深入探讨“Java解压缩助手”的相关知识,这个工具可能是一个用于处理ZIP压缩文件的实用程序,可以帮助开发者高效地进行文件的压缩与解压操作。 在Java中,处理ZIP文件主要依赖于java.util.zip包中的类...

    JAVA解压缩ZIP或RAR格式的文件

    在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件...在开发过程中,确保代码的健壮性和灵活性,同时考虑性能优化,例如批量解压缩、多线程处理等,将使你的程序更加高效和实用。

    JAVA文件压缩与解压缩实践(源代码+论文).rar

    Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化和备份场景下。本实践项目提供了源代码和相关论文,帮助开发者深入理解这一主题。在Java中,我们可以利用内置的`java.util.zip`包来实现...

    java-jdk-8u261-linux-x64.zip

    在Linux环境下,下载的"java-jdk-8u261-linux-x64.zip"是一个ZIP压缩文件,需要先使用解压命令将其解压缩。例如,可以使用`unzip java-jdk-8u261-linux-x64.zip`命令,将内容解压到当前目录。解压后,通常会得到一个...

    【计算机专业Java-毕业设计100套之】JAVA文件压缩与解压缩实践(源代码+论文)

    这个毕业设计项目专注于使用Java实现文件的压缩与解压缩功能,对于学习Java编程和理解数据压缩原理的学生来说,是一个非常实用的实践案例。下面我们将深入探讨相关的知识点。 首先,我们要了解文件压缩的基本原理。...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    Java文件的压缩与解压缩是Java编程中一个实用且常见的技术,主要涉及到Java的I/O流和第三方库如Apache Commons Compress、Java内置的java.util.zip包等。本实践项目结合了源代码和相关论文,提供了深入理解这一主题...

    java实现压缩与解压缩源码,demo 分享.zip

    10. **解压缩源码分析**:在提供的"java实现压缩与解压缩源码,demo分享.pdf"文件中,你可以找到具体的实现细节,包括如何打开和关闭流,如何处理文件条目,以及如何管理内存缓冲区等。 通过理解和应用这些知识点,...

    7z解压缩java代码+工具

    本主题聚焦于“7z解压缩java代码+工具”,它涉及到使用Java编程语言实现对7z、tar、gz等压缩格式的支持。下面我们将深入探讨相关知识点。 首先,7z是一种高效的压缩格式,由7-Zip软件创建,它提供了比常见的ZIP或...

    java-unrar-解压Winrar例子

    在软件开发领域,尤其是对于处理文件压缩与解压缩的应用场景中,Java 提供了丰富的工具和库来支持这类操作。本篇文章将详细解析一个具体的 Java 示例代码,该示例展示了如何使用 `java-unrar` 库来解压 WinRAR 文件...

    JAVA文件压缩与解压缩实践(源代码).zip

    总之,Java文件压缩与解压缩实践项目通过源代码展示了如何利用Java内置API进行文件和目录的压缩与解压缩,同时也为开发者提供了一个学习和参考的平台,有助于提升Java开发者的实用技能。通过深入研究这些示例,...

Global site tag (gtag.js) - Google Analytics