下面是压缩解压字符串的:
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); } }
相关推荐
一个在iOS使用ZipArchive实现压缩和解压缩文件的demo
Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。 public class ZipDemo extends JFrame{ JFileChooser fileChooser; //文件选择器 JList fileList; //待...
zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java
Java标准库的java.util.zip包通常适用于简单的ZIP格式压缩与解压缩,Apache Commons Compress和Java Zip4j提供了更多的压缩格式和功能选项。对于大型数据集和高性能要求的场景,还可以考虑使用专门的压缩工具或算法...
java解压zip压缩文件,读取压缩文件中的内容并输出到输出文件中。
Java解压缩文件,并以ZIP格式压缩文件,主要是使用java.util.zip 包中的类来实现解压、压缩文件功能,如果你对这个类并不太熟悉,你正好可以参考一下这个类是如何用的。
java实现压缩和压缩zip格式文件的功能,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。
java压缩文件成zip实现无乱码 内置类与jar包
95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip95.java拼接字符串案例.zip...
89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符串方法.zip89.java字符...
JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码
java zip文件的压缩与解压缩,支持中文 使用apache的工具包可设置字符编码
java 操作Zip文件(压缩、解压、加密) zip4j-1.3.2.jar ant-1.10.6.jar
Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...
Java把文件压缩成zip,粘贴在项目中即可使用
87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip87.java中字符串的比较.zip...
84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip84.java中字符串的特点.zip...
java 生成zip压缩文件 java 生成zip压缩文件
29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29.java字符串+操作.zip29...
96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip96.java字符串反转案例.zip...