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实现文件及目录压缩的更多相关文章

  1. java创建文件和目录

    java创建文件和目录 2013-09-04 12:56 99933人阅读 评论(7) 收藏 举报  分类: JAVA基础(10)  版权声明:本文为博主原创文章,未经博主允许不得转载. 创建文件和目 ...

  2. 封装7z软件实现批量文件或目录压缩

    哈哈,作为一个特别懒的运维人来说 兄弟我写了一个批量压缩文件或目录的小工具,用来批量压缩文件目录 弄一下,然后就不用管他了,后天看结果就好了 操作步骤: 1.选择想做压缩处理的根目录 2.选择你要的功 ...

  3. Java删除文件或目录及目录下所有文件

    一直在做C++相关开发的工作.突然某一天一时兴起,想学习下Java开发.然后再网上找到一本Java简明教程,入门是够用了.看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Jav ...

  4. java删除文件及其目录

    1.删除指定文件路径 public @ResponseBody String deleteFiles(HttpServletRequest request) { log.info(this.getCl ...

  5. learning java 访问文件和目录

    import java.io.File; import java.io.IOException; public class FileTest { public static void main(Str ...

  6. java下载文件指定目录下的文件

    方法一: @RequestMapping('download')def download(HttpServletRequest request, HttpServletResponse respons ...

  7. 【java工具类】删除文件及目录

    FileUtil.java /** * 删除文件及目录 * @param file; */ public static boolean delFile(File file) { if (!file.e ...

  8. Shell命令-文件及目录操作之chattr、lsattr

    文件及目录操作 - chattr.lsattr 1. chattr:改变文件属性 chattr命令的功能说明 chattr命令用于改变文件属性.这项指令可改变存放在ext2文件系统上的文件或目录属性, ...

  9. JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载

    将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...

随机推荐

  1. Hibernate,一对一外键单向 记录。Timestamp 的一个坑。

    首先是2张表 表A: 表B: 其中表B中的FormBaseId对应表A中的SubjectID. 数据库中没有设置外键关系. 下面是2个对应的实体 package questionnaire.model ...

  2. JS日期函数

    JS的日期函数有以下几个: getFullYear(); //获取当前年 getMonth(); //获取当前月,需要加1,而且只有一位数字,如果小于10需要前面加0 getDate(); //获取当 ...

  3. Spring Boot 集成MyBatis

    http://blog.csdn.net/isea533/article/details/50359390

  4. python 代码片段24

    #coding=utf-8 #内部类 class MyClass(object): class InnerClass: pass # 正则表达式 # 通过re模块来访问 import re m=re. ...

  5. HDU 2851 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2851 题目大意:给出N条路径,M个终点(是路径的编号) .重合的路径才算连通的,且路径是单向的.每条路 ...

  6. CentOS6.4 安装nmon

    安装 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_lin ...

  7. 本地C代码中创建Java对象

    作者:唐老师,华清远见嵌入式学院讲师. 创建Java域的对象就是创建Java类的实例,再调用Java类的构造方法. 以Bitmap的构建为例,Bitmap中并没有Java对象创建的代码及外部能访问的构 ...

  8. CentOS VirtualBox启动虚拟及报错:VirtualBox error: Kernel driver not installed (rc=1908)

    VirtualBox error: Kernel driver not installed (rc=1908) Hi all, Let me first say that this is my fin ...

  9. DropDownList 控件不能触发SelectedIndexChanged 事件

    相信DropDownList 控件不能触发SelectedIndexChanged 事件已经不是什么新鲜事情了,原因也无外乎以下几种: 1.DropDownList 控件的属性 AutoPostBac ...

  10. 【Go语言】集合与文件操作

    本文目录 1.数据集合的主要操作 1_1.字典的声明 1_2.字典的初始化和创建 1_3.字典的访问和操作 1_4.其他类型的数据集 2.文件操作 2_1.文件操作概述os包和path包 2_2.文件 ...