下面是压缩解压字符串的:
http://blog.csdn.net/kalision/article/details/7864407
下面是压缩解压文件的:
java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,需要导入该包。
使用zipoutputstream可以实现文件压缩,所有写入到zipoutputstream输入流中的数据,都会被ZIP格式压缩。
每个被压缩的文件或者目录在zip文件中都对应一个zipentry对象,每个zipentry都有一个name属性,表示它相对于zip文件目录的相对路径,对于目录,路径以“/“结尾,对于文件,路劲以文件名结尾。
zipoutputstream的putnextentry方法往zip文件中添加zipentry,紧接着写入到该文件zipoutputstream流中的数据都被保存到zipentry中,知道调用zipoutputstream的closeentry方法。
zipfile表示一个zip文件,它的entries方法能获得zip文件中的zipentry集合。的奥zipentry的输入流。
实例:
package book.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** * 用ZIP压缩和解压缩文件或目录 */ public class CompressUtil { /** * 压缩文件或者目录 * @param baseDirName 压缩的根目录 * @param fileName 根目录下待压缩的文件或文件夹名, * 星号*表示压缩根目录下的全部文件。 * @param targetFileName 目标ZIP文件 */ public static void zipFile(String baseDirName, String fileName, String targetFileName){ //检测根目录是否存在 if (baseDirName == null){ System.out.println("压缩失败,根目录不存在:" + baseDirName); return; } File baseDir = new File(baseDirName); if (!baseDir.exists() || (!baseDir.isDirectory())){ System.out.println("压缩失败,根目录不存在:" + baseDirName); return; } String baseDirPath = baseDir.getAbsolutePath(); //目标文件 File targetFile = new File(targetFileName); try{ //创建一个zip输出流来压缩数据并写入到zip文件 ZipOutputStream out =new ZipOutputStream( new FileOutputStream(targetFile)); if (fileName.equals("*")){ //将baseDir目录下的所有文件压缩到ZIP CompressUtil.dirToZip(baseDirPath, baseDir, out); } else { File file = new File(baseDir, fileName); if (file.isFile()){ CompressUtil.fileToZip(baseDirPath, file, out); } else { CompressUtil.dirToZip(baseDirPath, file, out); } } out.close(); System.out.println("压缩文件成功,目标文件名:" + targetFileName); } catch (IOException e){ System.out.println("压缩失败:" + e); e.printStackTrace(); } } /** * 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下 * @param zipName 待解压缩的ZIP文件名 * @param targetBaseDirName 目标目录 */ public static void upzipFile(String zipFileName, String targetBaseDirName){ if (!targetBaseDirName.endsWith(File.separator)){ targetBaseDirName += File.separator; } try { //根据ZIP文件创建ZipFile对象 ZipFile zipFile = new ZipFile(zipFileName); ZipEntry entry = null; String entryName = null; String targetFileName = null; byte[] buffer = new byte[4096]; int bytes_read; //获取ZIP文件里所有的entry Enumeration entrys = zipFile.entries(); //遍历所有entry while (entrys.hasMoreElements()) { entry = (ZipEntry)entrys.nextElement(); //获得entry的名字 entryName = entry.getName(); targetFileName = targetBaseDirName + entryName; if (entry.isDirectory()){ // 如果entry是一个目录,则创建目录 new File(targetFileName).mkdirs(); continue; } else { // 如果entry是一个文件,则创建父目录 new File(targetFileName).getParentFile().mkdirs(); } //否则创建文件 File targetFile = new File(targetFileName); System.out.println("创建文件:" + targetFile.getAbsolutePath()); //打开文件输出流 FileOutputStream os = new FileOutputStream(targetFile); //从ZipFile对象中打开entry的输入流 InputStream is = zipFile.getInputStream(entry); while ((bytes_read = is.read(buffer)) != -1){ os.write(buffer, 0, bytes_read); } //关闭流 os.close( ); is.close( ); } System.out.println("解压缩文件成功!"); } catch (IOException err) { System.err.println("解压缩文件失败: " + err); } } /** * 将目录压缩到ZIP输出流。 */ private static void dirToZip(String baseDirPath, File dir, ZipOutputStream out){ if (dir.isDirectory()){ //列出dir目录下所有文件 File[] files = dir.listFiles(); // 如果是空文件夹 if (files.length == 0){ ZipEntry entry = new ZipEntry(getEntryName(baseDirPath, dir)); // 存储目录信息 try { out.putNextEntry(entry); out.closeEntry(); } catch (IOException e) { e.printStackTrace(); } return; } for (int i=0; i<files.length; i++){ if (files[i].isFile()){ //如果是文件,调用fileToZip方法 CompressUtil.fileToZip(baseDirPath, files[i], out); } else { //如果是目录,递归调用 CompressUtil.dirToZip(baseDirPath, files[i], out); } } } } /** * 将文件压缩到ZIP输出流 */ private static void fileToZip(String baseDirPath, File file, ZipOutputStream out){ FileInputStream in = null; ZipEntry entry = null; // 创建复制缓冲区 byte[] buffer = new byte[4096]; int bytes_read; if (file.isFile()){ try { // 创建一个文件输入流 in = new FileInputStream(file); // 做一个ZipEntry entry = new ZipEntry(getEntryName(baseDirPath, file)); // 存储项信息到压缩文件 out.putNextEntry(entry); // 复制字节到压缩文件 while((bytes_read = in.read(buffer)) != -1){ out.write(buffer, 0, bytes_read); } out.closeEntry(); in.close(); System.out.println("添加文件" + file.getAbsolutePath() + "被到ZIP文件中!"); } catch (IOException e){ e.printStackTrace(); } } } /** * 获取待压缩文件在ZIP文件中entry的名字。即相对于跟目录的相对路径名 * @param baseDirPath * @param file * @return */ private static String getEntryName(String baseDirPath, File file){ if (!baseDirPath.endsWith(File.separator)){ baseDirPath += File.separator; } String filePath = file.getAbsolutePath(); // 对于目录,必须在entry名字后面加上"/",表示它将以目录项存储。 if (file.isDirectory()){ filePath += "/"; } int index = filePath.indexOf(baseDirPath); return filePath.substring(index + baseDirPath.length()); } public static void main(String[] args) { //压缩C盘下的temp目录,压缩后的文件是C:/temp.zip String baseDirName = "C:/"; String fileName = "temp/"; String zipFileName = "C:/temp.zip"; CompressUtil.zipFile(baseDirName, fileName, zipFileName); //将刚创建的ZIP文件解压缩到D盘的temp目录下 System.out.println(); fileName = "D:/temp"; CompressUtil.upzipFile(zipFileName, fileName); } }
相关推荐
它通常用于单个文件的压缩,支持在线压缩和解压缩,且文件头包含有关压缩文件的信息,如时间戳和文件类型。 2. Zip:Zip是另一种流行的压缩格式,它可以将多个文件和目录打包到一个单一的归档文件中。Zip使用多种...
在Java编程语言中,压缩和解压缩字符串是常见的数据处理任务,主要应用于减少存储空间或在网络上传输数据时减小带宽需求。本篇将详细探讨两种主要的方法:Inflater和Deflater,它们分别用于解压缩和压缩字符串。 ...
以上介绍了如何使用Java实现文件的压缩和解压缩功能。通过`java.util.zip`包提供的工具类,可以方便地实现文件压缩与解压缩操作。需要注意的是,在实际应用过程中还需要考虑异常处理、资源释放等细节问题,以确保...
在Java编程中,实现文件的压缩和解压缩是一项常见的任务,这通常涉及到对`java.util.zip`包的使用。`ZipOutputStream`和`ZipInputStream`是Java标准库提供的两个关键类,它们分别用于文件的压缩和解压缩。然而,需要...
本文将详细介绍如何使用 Java 实现 ZIP 文件的压缩和解压缩功能,并通过具体的代码示例来展示其实现过程。 #### Java 中 ZIP 文件处理的核心类 Java 提供了两个核心类来处理 ZIP 文件:`ZipOutputStream` 和 `...
ZIP是一种更通用的压缩格式,适合大型文件,而QuickLZ则更适合需要快速压缩和解压缩的场景,如游戏中的资源管理。 总结起来,Cocos2d-x开发者可以通过集成QuickLZ库来实现高效字符串压缩,从而优化游戏的性能和资源...
gzip是一种广泛使用的文件压缩格式,它基于deflate算法,并添加了额外的头部和尾部信息,以便于识别和解压。在JavaScript中,使用pako库进行gzip压缩和解压缩非常简单: 1. **压缩**:使用`pako.gzip()`方法,将未...
在Java中,可以利用标准库中的`java.util.zip`包来进行文件的压缩和解压缩操作。这个包提供了多种类和接口,如`ZipOutputStream`、`ZipEntry`等,可以非常方便地实现压缩功能。 #### 文件压缩示例 下面是一个简单的...
Java 提供了多种方式来实现 ZIP 文件的压缩和解压缩功能,同时也支持对 ZIP 文件进行加密保护。本文将详细介绍一个具体的 Java 实现案例,并对其关键代码进行深入分析。 #### 二、主要功能模块解析 ##### 2.1 `...
以下是一段示例代码,它演示了如何使用Apache的工具类进行文件的压缩和解压缩: ```java import java.io.*; import java.util.*; import java.util.zip.*; import org.apache.tools.zip.*; /** * 提供对单个文件...
在编程中实现ZIP压缩和解压缩,可以使用开源库如Java的`java.util.zip`包,C#的`System.IO.Compression`命名空间,或者Python的`zipfile`模块。这些库已经实现了ZIP格式和Deflate算法,开发者只需要调用相应的API...
总结,文件夹的ZIP压缩和解压缩是日常IT工作中常见的操作,涉及到文件系统操作、数据压缩和可能的加密。`zipDir`和`Unzipdir`函数代表了这一过程的核心步骤,即创建和解析ZIP文件。理解和掌握这些概念对于提升文件...
总结来说,这个压缩包提供了一个用Java实现的LZW压缩算法,包括了字典管理、数据压缩和解压缩、以及可能的用户界面和交互元素。这些文件可以作为一个学习资源,用于理解和实现LZW算法,或者用于在Java项目中集成LZW...
在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或者需要节省存储空间时。本篇文章将深入探讨如何使用Java实现文件、目录的压缩与解压缩功能,并介绍一个具体的`ZipUtils.java`类的实现示例...
对于GZIP格式,我们使用`GZIPOutputStream`来压缩数据,以下是一个压缩字符串的例子: ```java import java.io.*; import java.util.zip.*; public class GzipExample { public static void main(String[] args)...
在提供的"okbase.net"文件中,可能包含了使用Java、C++和C实现的LZMA压缩算法的源代码示例。通过这些示例,开发者可以深入理解LZMA算法的实现细节,学习如何在实际项目中应用这些语言进行数据压缩。分析这些示例源码...
- 源代码文件:可能用C、Python或Java等编程语言实现的LZW压缩和解压缩程序,展示了算法的具体实现。 - 示例数据:用于测试算法的文本文件或其他类型的数据文件。 - 说明文档:详细解释LZW算法原理、代码实现以及...
在Java中,`java.util.zip.GZIPOutputStream`和`java.util.zip.GZIPInputStream`类提供了对GZIP压缩和解压缩的支持。 3. 开发环境 本文档提到的程序是在JBuilder2006集成开发环境中用Java语言实现的,利用Java的IO...