首页 java实现压缩与解压缩ZIP

java实现压缩与解压缩ZIP

举报
开通vip

java实现压缩与解压缩ZIPjava实现压缩与解压缩ZIP 压缩的 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStrea...

java实现压缩与解压缩ZIP
java实现压缩与解压缩ZIP 压缩的 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Zip { static final int BUFFER = 2048; public static void main(String argv[]) { try { BufferedInputStream origin = null; FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip"); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( dest)); byte data[] = new byte[BUFFER]; File f = new File("e:\\test\\a\\"); File files[] = f.listFiles(); for (int i = 0; i < files.length; i++) { FileInputStream fi = new FileInputStream(files[i]); origin = new BufferedInputStream(fi, BUFFER); ZipEntry entry = new ZipEntry(files[i].getName()); out.putNextEntry(entry); int count; while ((count = origin.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } origin.close(); } out.close(); } catch (Exception e) { e.printStackTrace(); } } } 2,解压缩的。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class UnZip { static final int BUFFER = 2048; public static void main(String argv[]) { try { String fileName = "E:\\test\\myfiles.zip"; String filePath = "E:\\test\\"; ZipFile zipFile = new ZipFile(fileName); Enumeration emu = zipFile.entries(); int i=0; while(emu.hasMoreElements()){ ZipEntry entry = (ZipEntry)emu.nextElement(); //会把目录作为一个file读出一次,所以只建立目录就可 以,之下的文件还会被迭代到。 if (entry.isDirectory()) { new File(filePath + entry.getName()).mkdirs(); continue; } BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry)); File file = new File(filePath + entry.getName()); //加入这个的原因是zipfile读取文件是随机读取的,这就 造成可能先读取一个文件 //而这个文件所在的目录还没有出现过,所以要建出目录 来。 File parent = file.getParentFile(); if(parent != null && (!parent.exists())){ parent.mkdirs(); } FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, count); } bos.flush(); bos.close(); bis.close(); } zipFile.close(); } catch (Exception e) { e.printStackTrace(); } } } 偶尔一次,遇到这样一个问题,要求对zip文件进行解压缩,并读取压缩包中.txt和.inf文件的数据,经过jdk Helper 和 Google才将问题得以解决。这里只写了解压过程,在main方法中压缩包存放路径和解压到目标的文件已经硬编码进去了。 程序整体结构不是很令人满意,仍然需要重构....... package com.da.unzip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class Unzip { public static void main(String args) throws Exception { Unzip unzip = new Unzip(); String zippath = "C:\\unzip\\";// /解压到的目标文件路径 String zipDir = "C:\\data\\";// 要解压的压缩文件的存放路径 File file = new File(zipDir); List list = unzip.getSubFiles(file); for (Object obj : list) { String realname = ((File)obj).getName(); System.out.println(realname); int end = realname.lastIndexOf("."); System.out.println("要解压缩的文件名.........."+zipDir+realname); System.out.println("解压到的目录" +zippath+realname.substring(0, end)); unzip.testReadZip(zippath,zipDir+realname); } } /* * 解压缩功能. 将zippath目录文件解压到unzipPath目录下. @throws Exception */ public void ReadZip(String zippath, String unzipPath) throws Exception { ZipFile zfile = new ZipFile(unzipPath);// 生成一个zip文件对象 System.out.println(zfile.getName());// 获取要解压的zip的文件名全路径 Enumeration zList = zfile.entries();// 返回枚举对象 ZipEntry ze = null;// 用于 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示 ZIP 文件条目 byte buf = new byte[1024];// 声明字节数组 /** * 循环获取zip文件中的每一个文件 */ while (zList.hasMoreElements()) { // 从ZipFile中得到一个ZipEntry ze = (ZipEntry) zList.nextElement(); if (ze.isDirectory())// 如果为目录条目,则返回 true,执行下列语句 { System.out.println("Dir: " + ze.getName() + " skipped.."); continue; } int begin = zfile.getName().lastIndexOf("\\") + 1; int end = zfile.getName().lastIndexOf("."); String zipRealName = zfile.getName().substring(begin, end); System.out.println("解压缩开始 Extracting:"+ze.getName()+"\t"+ze.getSize()+"\t"+ze.getCompressed Size()); // 以ZipEntry为参数得到一个InputStream,并写到OutputStream中, 并加上缓冲 OutputStream os = new BufferedOutputStream( new FileOutputStream(getRealFileName(zippath + "\\" + zipRealName, ze.getName()))); InputStream is = new BufferedInputStream(zfile.getInputStream(ze)); String fileName = getRealFileName(zippath, ze.getName()).getName(); System.out.println("解压出的文件名称:" + fileName); int readLen = 0; while ((readLen = is.read(buf, 0, 1024)) != -1) { os.write(buf, 0, readLen); } is.close(); os.close(); // System.out.println("解压缩结束Extracted: "+ze.getName()); } zfile.close(); } /** * 给定根目录,返回一个相对路径所对应的实际文件名. * * @param zippath * 指定根目录 * @param absFileName * 相对路径名,来自于ZipEntry中的name * @return java.io.File 实际的文件 */ private File getRealFileName(String zippath, String absFileName) { String dirs = absFileName.split("/", absFileName.length()); File ret = new File(zippath);// 创建文件对象 if (dirs.length > 1) { for (int i = 0; i < dirs.length - 1; i++) { ret = new File(ret, dirs[i]); } } if (!ret.exists()) {// 检测文件是否存在 ret.mkdirs();// 创建此抽象路径名指定的目录 } ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child // 路径名字符串创建一个新 File 实例 return ret; } }
本文档为【java实现压缩与解压缩ZIP】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_219945
暂无简介~
格式:doc
大小:134KB
软件:Word
页数:0
分类:互联网
上传时间:2017-12-12
浏览量:9