代码源地址:http://sourceforge.net/p/sevenzipjbind/discussion/757964/thread/b64a36fb
支持压缩格式:- 7z, Zip, Tar, Rar, Lzma, Iso, GZip, Cpio, BZIP2, Z, Arj, Lzh, Cab, Chm, Nsis, DEB, RPM, UDF, WIM
代码如下:
package com.neusoft; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.util.logging.Logger; import net.sf.sevenzipjbinding.ExtractAskMode; import net.sf.sevenzipjbinding.ExtractOperationResult; import net.sf.sevenzipjbinding.IArchiveExtractCallback; import net.sf.sevenzipjbinding.ISequentialOutStream; import net.sf.sevenzipjbinding.ISevenZipInArchive; import net.sf.sevenzipjbinding.PropID; import net.sf.sevenzipjbinding.SevenZip; import net.sf.sevenzipjbinding.SevenZipException; import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; /** * <p>Description: [压缩文件工具包]</p> * @author <a href="mailto: li.bb@xxx.com">李彬彬</a> * @version $Revision$ */ public class ZipTools { private static Logger logger = Logger.getLogger(ZipTools.class.getCanonicalName()); /** * <p>Discription:[将解压文件解压到指定目录下]</p> * @param file 文件全路径 * @param extractPath 解压后文件存往路径 -支持压缩格式: 7Z,ZIP,TAR,RAR,LZMA,ISO,GZIP,BZIP2,CPIO,Z,ARJ,LZH,CAB,CHM,NSIS,DEB,RPM,UDF,WIM * @throws SevenZipException * @throws IOException * @author:[李彬彬] * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public void extract(String file, String extractPath) throws SevenZipException, IOException { ISevenZipInArchive inArchive = null; RandomAccessFile randomAccessFile = null; try { randomAccessFile = new RandomAccessFile(new File(file), "r"); inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile)); inArchive.extract(null, false, new ExtractCallback(inArchive, extractPath)); } finally { if (inArchive != null) { inArchive.close(); } if (randomAccessFile != null) { randomAccessFile.close(); } } } /** * <p>Description: [提后文件后回调方法]</p> * @author <a href="mailto: li.bb@neusoft.com">李彬彬</a> * @version $Revision$ */ private class ExtractCallback implements IArchiveExtractCallback { private final ISevenZipInArchive inArchive; private final String extractPath; public ExtractCallback(ISevenZipInArchive inArchive, String extractPath) { this.inArchive = inArchive; if (!extractPath.endsWith("/") && !extractPath.endsWith("\\")) { extractPath += File.separator; } this.extractPath = extractPath; } @Override public ISequentialOutStream getStream(final int index, ExtractAskMode extractAskMode) throws SevenZipException { return new ISequentialOutStream() { @Override public int write(byte[] data) throws SevenZipException { String filePath = inArchive.getStringProperty(index, PropID.PATH); FileOutputStream fos = null; try { File path = new File(extractPath + filePath); if (!path.getParentFile().exists()) { path.getParentFile().mkdirs(); } if (!path.exists()) { path.createNewFile(); } fos = new FileOutputStream(path, true); fos.write(data); } catch (IOException e) { logger.log(null, "IOException while extracting " + filePath); } finally { try { if (fos != null) { fos.flush(); fos.close(); } } catch (IOException e) { logger.log(null, "Could not close FileOutputStream", e); } } return data.length; } }; } @Override public void setCompleted(long arg0) throws SevenZipException { } @Override public void setTotal(long arg0) throws SevenZipException { } @Override public void prepareOperation(ExtractAskMode arg0) throws SevenZipException { } @Override public void setOperationResult(ExtractOperationResult arg0) throws SevenZipException { } } }
相关推荐
这个"Java 11 压缩包版 - jdk11.0.12"包含了Java Development Kit的最新稳定版本,允许开发者在Windows操作系统上搭建Java开发环境。下面将详细介绍如何安装、配置以及使用Java 11,同时也会涉及一些相关的重要知识...
Java 1.8源码压缩包是一个非常重要的学习资源,它包含了Java开发工具集(JDK)和Java运行环境(JRE)的核心组件。对于Java开发者来说,理解源码可以帮助他们深入理解语言的工作原理,提高编程技能,并解决实际开发中...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
在Java编程中,读写压缩包是常见的任务,特别是在处理大量数据或文件打包与传输时。这个示例可能展示了如何使用Java内置的`java.util.zip`包来创建、读取和修改ZIP压缩文件。以下是对这个主题的详细阐述: ### 1. ...
在Java编程语言中,处理压缩文件,如ZIP格式,是一项常见的任务。本示例源码提供了从ZIP压缩包中提取文件的方法,这对于软件开发、数据传输以及文件打包解包非常实用。下面我们将深入探讨Java中如何操作ZIP文件,并...
总的来说,"Java从压缩包中提取文件.rar"这个资源为Java开发者提供了一个学习和参考的实例,涵盖了Swing GUI的创建以及使用Java处理压缩文件的方法,特别是从RAR文件中提取内容。无论是初学者还是有经验的开发者,都...
Java 压缩包是一个包含了Java开发环境的压缩文件,主要包含Java Development Kit(JDK)的版本1.5。JDK是Oracle公司提供的用于Java应用程序开发和部署的基础工具集,它为程序员提供了编写、编译、调试以及运行Java...
在Java编程环境中,创建一个能够加密和解密ZIP压缩包的项目是一项常见的需求,尤其是在处理敏感数据时。本文将深入探讨如何使用Java实现这一功能,同时也会提及与ActionScript 3(AS3)进行加密解密的相关知识。 ...
这份"Java学习适用课件"压缩包提供了丰富的学习资源,旨在帮助初学者和有经验的开发者深入理解和掌握Java的核心概念和技术。 首先,让我们从基础开始。Java的基础包括语法结构、变量、数据类型、运算符和控制流程。...
在这个免费分享的JDK 8压缩包文件中,你可以找到所有必要的组件来搭建和运行Java应用程序。 首先,JDK 8的核心特性之一是Lambda表达式。这是一种函数式编程的概念,允许将函数作为一个对象进行传递,简化了多线程...
Java Maven压缩包是一个包含了Apache Maven 3.8.4版本的软件包,Maven是Java开发中的一个项目管理和综合工具。它主要负责构建、依赖管理和项目信息管理,极大地简化了Java项目的构建过程。Maven使用一种标准的项目...
Java的标准库`java.util.zip`提供了`ZipInputStream`和`ZipEntry`类来处理ZIP格式的压缩包。通过SFTP连接到服务器,下载压缩包到本地,然后使用这些类进行解压缩: ```java // 下载压缩包到本地 sftpChannel.get(...
这个名为"JAVA类小游戏集合压缩包"的资源包含了四个使用Java编写的经典小游戏:五子棋、数独、俄罗斯方块和雷霆战机。下面我们将深入探讨这些游戏的实现原理以及Java在游戏开发中的应用。 首先,`FiveChess.java`是...
在Java编程语言中,生成压缩包是一项常见的任务,特别是在处理大量数据或文件打包发送时。本文将深入探讨如何使用Java来创建和管理压缩文件,主要参考了CSDN上的一篇博客文章“java生成压缩包”。 首先,Java标准库...
在Java中,处理zip压缩包是一项常见的任务,例如读取、创建、修改或提取压缩包内的文件。本源码提供了一个Java程序,用于查看zip压缩包的内容,这对于理解和学习如何在Java中操作zip文件非常有帮助。 在Java中,`...
8. 源码学习价值:作为“经典”标签的源码,它可能是Java社区中流传的成熟代码示例,有助于初学者理解如何在实际项目中使用Java处理ZIP文件。通过阅读和分析这些源码,开发者可以加深对`java.util.zip`包的理解,...
`Java zip压缩包查看程序源码.rar`是一个包含Swing图形界面应用程序和相关工具类的资源包,它允许开发者查看和操作ZIP压缩文件。这个工具包简化了与ZIP文件交互的过程,减少了开发者的编码工作量。 首先,Swing是...
摘要:Java源码,文件操作,提取文件 Java从压缩包中提取文件,可借机学习一下文件选择按钮事件处理,弹出文件选择器,并判断是否点击了打开按钮,得到选择文件的绝对路径,得到压缩条目的枚举对象,依次枚举条目,设置...
在Java编程环境中,处理RAR压缩包并对其进行解压是一个常见的任务,特别是在自动化脚本或数据迁移等场景下。本文将详细介绍如何使用Java实现这个功能,特别是处理带密码保护的RAR文件,同时支持中文文件名,并能在...