- 浏览: 43764 次
- 性别:
- 来自: 上海
最近访客 更多访客>>
最新评论
-
xxxl8023:
貌似还是不行啊
oralce 数据库不同表空间数据导入 -
一衣带水:
看commons的ioutils
删除文件和目录 -
hanbin51987:
很有用哦 嘎嘎 谢谢 拿走啦 嘎嘎
删除文件和目录
package com.kehwa.me17.util; 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;*/ import org.apache.tools.zip.ZipOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 用ZIP压缩和解压缩文件或目录 */ public class CompressUtil { private final static Log log = LogFactory.getLog(CompressUtil.class); /** * 压缩文件或者目录 * @param baseDirName 压缩的根目录 * @param fileName 根目录下待压缩的文件或文件夹名, * 星号*表示压缩根目录下的全部文件。 * @param targetFileName 目标ZIP文件 */ public static void zipFile(String baseDirName,String targetFileName) { //检测根目录是否存在 if (baseDirName == null){ log.info("压缩失败,根目录不存在:" + baseDirName); return; } File file = new File(baseDirName); if (!file.exists()){ log.info("压缩失败,文件不存在:" + baseDirName); return; } String baseDirPath = file.getAbsolutePath(); //目标文件 File targetFile = new File(targetFileName); try{ //创建一个zip输出流来压缩数据并写入到zip文件 ZipOutputStream out =new ZipOutputStream( new FileOutputStream(targetFile)); if (file.isFile()){ CompressUtil.fileToZip(baseDirPath, file, out); } else { CompressUtil.dirToZip(baseDirPath, file, out); } out.close(); log.info("压缩文件成功,目标文件名:" + targetFileName); } catch (IOException e){ log.info("压缩失败:" + 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.getEntries(); //遍历所有entry while (entrys.hasMoreElements()) { entry = (ZipEntry)entrys.nextElement(); //获得entry的名字 entryName = entry.getName(); System.out.println(entryName); targetFileName = targetBaseDirName + entryName; if (entry.isDirectory()){ // 如果entry是一个目录,则创建目录 new File(targetFileName).mkdirs(); continue; } else { // 如果entry是一个文件,则创建父目录 new File(targetFileName).getParentFile().mkdirs(); } File targetFile = new File(targetFileName); FileOutputStream os = new FileOutputStream(targetFile); InputStream is = zipFile.getInputStream(entry); while ((bytes_read = is.read(buffer)) != -1){ os.write(buffer, 0, bytes_read); } //关闭流 os.close( ); is.close( ); } log.info("解压缩文件成功!"); } 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(); log.info("添加文件" + 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";*/ String baseDirName = "E:/plat"; String zipFileName = "E:/aa.zip"; //CompressUtil.upzipFile("e:/ME3.zip", "E:/"); CompressUtil.zipFile("e:/123", "e:/123.zip"); //将刚创建的ZIP文件解压缩到D盘的temp目录下 //System.out.println(); /*String zipFileName = "E:/plat.zip"; String fileName = "E:/plat1"; upzipFile(zipFileName,fileName);*/ //CompressUtil.zipFile(baseDirName, fileName, zipFileName); } }
补充说明一点,使用java.util.zip包时,是以UTF-8编码格式读取的文件名,因此在中文windows操作系统(Windows操作系统默认字符集为:GBK)中使用时会导致文件名解析错误,因此需要使用org.apache.tools.zip.ZipEntry和 org.apache.tools.zip.ZipOutputStream类来解决这一问题。
发表评论
-
J2EE开发之常用开源项目介绍
2011-06-14 15:42 591主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以 ... -
JSTL实现自增
2011-06-08 10:26 640<%@ page contentType="t ... -
面试题1
2011-02-16 10:34 610本周去参加了一次面试,到现在还记得一道算法题: 1、除 ... -
APPFUSE2.0.1开发过程的问题记录和解决办法
2011-02-15 11:16 10001。怎样使每次测试时不删除数据库中表结构? 解答:将pom.x ... -
解压版Tomcat6变成服务器版
2010-11-08 14:56 13471、下载解压版的tomcat 6.*; 2、 运行-> ... -
J2EE开发之常用开源项目介绍
2008-05-22 17:52 8271持久层:1)Hibernate这个不用介绍了,用的很频繁,用 ... -
servlet 相关的Listener应用
2008-04-06 14:33 998从作用域范围来说,Servlet的作用域有ServletCon ... -
java日期格式专题
2008-04-01 11:49 22951.将日期类型转化为指定格式的字符串类型 Date d = ... -
聊天系统历程(一)
2008-03-29 12:42 4用Java实现简易聊天室目的:熟练掌握j2se的各个知识点,并 ... -
WEB项目开发的一般流程
2008-03-27 17:29 3590WEB项目开发的一般流 ... -
J2EE设计模式浅谈(二)之Filter
2008-03-11 17:06 2887其实J2EE中太多的定义是很烦人的,设计模式也很抽象的,今天我 ... -
J2EE设计模式浅谈(一)
2008-03-11 16:46 3297J2EE设计模式浅谈 zhuam@st ... -
删除文件和目录
2007-11-27 21:21 882本例子介绍如何删除文件系统上的文件和目录,能删除单个 ... -
iBatis学习小结
2007-10-30 09:02 1137sqlMap文件 代码 <?xml ver ...
相关推荐
解压专家-文件解压和压缩.apk
CompresszZipFile 中带是 zip解压 ZipFileUtil 是文件的压缩 和rar的解压
java实现的文件解压和压缩,没有中文乱码问题,多么复杂的压缩文件都可以解压,多么烦琐的文件都可以压缩
java代码实现文件解压以及多个文件或者文件夹的压缩,
哈夫曼树解压与压缩--14页.pdf
电脑已安装rar.exe程序 内含解压rar文件和压缩rar文件的bat脚本及使用说明 使用简单 建议直接存在桌面进行解压和压缩操作,只需要修改rar文件名即可
代码实现解压,压缩linux下的GZ格式文件
JAVA 实现ZIP文件解压和压缩的功能,所需jar包也在里面了,亲测可行,若是需要java后台实现上传功能可留评论更新
实验内容:写出程序,利用哈弗曼编码实现对文件的压缩,并能解压文件。 实验步骤: 1、压缩 (1) 统计原始文件中各字节出现的概率(次数); (2) 采用哈弗曼算法对各字节进行编码,建立哈弗曼对照表; a) 构造...
一款可以实现文件解压和压缩小应用源码,该应用是实现了怎样利用第三方类库 ZipArchive 来解压和压缩.zip文件的,还可以实现了先从网络下载一个.zip文件下来,然后对它进行解压,最后可以对再进行压缩等功能,也基本...
java解压zip压缩文件,读取压缩文件中的内容并输出到输出文件中。
压缩器解压器为了节省存储空间,常常需要把文本文件采用压缩编码的方式储存。例如:一个包含1000个x的字符串和2000个y的字符串的文本文件在不压缩时占用的空间为3002字节(每个x或每个y占用一个字节,两个字节用来...
实现对bmp文件的压缩解压,提供了压缩和解压两个方法
C++利用Zlib库实现zip文件压缩及解压 支持递归压缩.可配合自动更新功能实现zip压缩包进得软件更新
5 比较decompress txt和input txt中的字符是否完全相同 并计算压缩率 压缩率 compress txt文件大小 input txt的文件大小 100%">1 初始化:给出十万个随机字符 字符中只包含小写的英文字母a z 输出初始化文件名为...
今天梳理一下项目中用到的压缩、解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件。今天就好好整理记录下,别下次遇到需求又重头开始了。 DotNetZip DotNetZip是一个开源的免费类库,主要提供了...
利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也...在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件
3将命令行参数指定的压缩文件解压到当前目录。 其Usage为:MyZip /E <压缩文件名> 提示:只需修改MyZip程序,将原先读取要加入的文件的内容后直接写到压缩文件中的代码,修改为先将要加入的文件压缩为一个临时文件后...
UPX压缩和解压缩器,不是源码,是工具,可以实现exe文件的压缩和解压缩
对zip文件进行解压缩工具类,以及jar包