java实现文件及目录压缩
package org.alfresco.repo.bom.util; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream; /**
* Compressor Util
* @author HJ
*
*/
public class CompressorUtil { private static final String source = "F:/test"; // wait compressor source path
private static final String zipSource = "F:/chiang.zip"; // after compressor zip file path
private static long startTime;// compressor start system time
private static long endTime;// compressor end system time public void compressor() throws Exception{
startTime = System.currentTimeMillis();//record start compressor system time ,
boolean flag = false;// flag :true->compressor success
String baseDir = "";//defalut relative Dir , "" is gen Dir File s = new File(source);
File zs = new File(zipSource);//create zip file
if (zs.exists()) {// if this dir exists this zip file
zs.delete(); // delete this zip file ,
}
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new FileOutputStream(zs));
zos.setEncoding("GBK"); // solve Chinese garbled
startCompressor(baseDir, zos, s);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (zos!=null)
zos.close();
endTime = System.currentTimeMillis();
System.out.println("compressor success,use time:"+(endTime-startTime)+"ms");
}
} public void startCompressor(String baseDir,ZipOutputStream zos,File source) throws Exception{
if (source.isFile()) {// is file
toCompressedFile(baseDir, zos, source);
}
if (source.isDirectory()) { //is dir
File[] sources = source.listFiles(); // get dir all files ( file or dir)
for(File f:sources){
if (f.isFile()) {// is file
toCompressedFile(baseDir, zos, f);
}
if (f.isDirectory()) {//is dir
// if is dir , update baseDir value .
String newBaseDir = baseDir + f.getName() + "/";
createCompressedDir(baseDir, zos, f);//create dir and entry
startCompressor(newBaseDir, zos, f); // Re
}
}
}
}
/**
* add entry to zip file by stream way
* @param baseDir
* @param zos
* @param f
* @throws Exception
*/
public void toCompressedFile(String baseDir,ZipOutputStream zos,File f) throws Exception{
InputStream input = null;
ZipEntry z = new ZipEntry(baseDir+f.getName());
try {
zos.putNextEntry(z); // add entry to zip file
input = new FileInputStream(f);
int data = 0;
while ((data=input.read())!=-1) {
zos.write(data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(input!=null)
input.close();
zos.closeEntry();
}
} /**
* create compressed file dir and ZipEntry
* @param baseDir
* @param zos zip file's ZipOutputStream
* @param f
*/
public void createCompressedDir(String baseDir,ZipOutputStream zos,File f){
ZipEntry z = new ZipEntry(baseDir+f.getName()+"/");
try {
zos.putNextEntry(z);
zos.closeEntry();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //test main method
public static void main(String[] args) throws Exception{
CompressorUtil cu = new CompressorUtil();
cu.compressor();
}
}
java实现文件及目录压缩的更多相关文章
- java创建文件和目录
java创建文件和目录 2013-09-04 12:56 99933人阅读 评论(7) 收藏 举报 分类: JAVA基础(10) 版权声明:本文为博主原创文章,未经博主允许不得转载. 创建文件和目 ...
- 封装7z软件实现批量文件或目录压缩
哈哈,作为一个特别懒的运维人来说 兄弟我写了一个批量压缩文件或目录的小工具,用来批量压缩文件目录 弄一下,然后就不用管他了,后天看结果就好了 操作步骤: 1.选择想做压缩处理的根目录 2.选择你要的功 ...
- Java删除文件或目录及目录下所有文件
一直在做C++相关开发的工作.突然某一天一时兴起,想学习下Java开发.然后再网上找到一本Java简明教程,入门是够用了.看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Jav ...
- java删除文件及其目录
1.删除指定文件路径 public @ResponseBody String deleteFiles(HttpServletRequest request) { log.info(this.getCl ...
- learning java 访问文件和目录
import java.io.File; import java.io.IOException; public class FileTest { public static void main(Str ...
- java下载文件指定目录下的文件
方法一: @RequestMapping('download')def download(HttpServletRequest request, HttpServletResponse respons ...
- 【java工具类】删除文件及目录
FileUtil.java /** * 删除文件及目录 * @param file; */ public static boolean delFile(File file) { if (!file.e ...
- Shell命令-文件及目录操作之chattr、lsattr
文件及目录操作 - chattr.lsattr 1. chattr:改变文件属性 chattr命令的功能说明 chattr命令用于改变文件属性.这项指令可改变存放在ext2文件系统上的文件或目录属性, ...
- JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...
随机推荐
- shell中命令之间数据的传递
1.管道 "|" ls | cat -n > out.txt 2. 子shell 2.1 子shell 说明 在shell脚本中可以用()操作符可以定义一个子shell #/ ...
- 《Getting Started with Storm》译文 Homepage
拿到这本书感觉还挺薄,所以当下就想赶紧读完,然后尝试着翻译下,并加上一些自己的理解,作学习交流之用,非盈利性质 这段时间在做一个 分布式的.支持大吞吐的.实时的日志系统 ,主要用到的开源方案有Kaf ...
- linux 查看机器的cpu,操作系统等命令
看cpu信息,型号,几核 [root@f3 ~]# cat /proc/cpuinfo | grep name | cut -f2 -d:| uniq -c 16 Intel(R) Xeon(R) C ...
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
- hadoop2.0安装中遇到的错误:mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid
转:http://blog.csdn.net/bamuta/article/details/12995139 解决办法 : 在1个网站上找到了解决方法,(网络忘了没记)urg, my copy/pas ...
- JavaScript进阶(三)之对象
返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应“星期”,通过数组完成,代码如下: <script type="text/javascr ...
- 【CodeVS】p1038 一元三次方程求解
题目描述 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100 ...
- 最好的文本框样式 最漂亮的文本框样式 textbox css样式
输入框景背景透明: <input style="background:transparent;border:1px solid #ffffff"> 鼠标划过输入框,输入 ...
- 一、午夜倒数《苹果iOS实例编程入门教程》
该app为应用的功能为计算离午夜12:00点的剩余时间 现版本 SDK 8.4 Xcode 运行Xcode 选择 Create a new Xcode project ->Single View ...
- java 深入浅出工厂模式
一.引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“ ...