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. eclipse 异常Unhandled event loop exception解决办法

    http://blog.csdn.net/leiswpu/article/details/26712709

  2. Myeclipse中创建Maven工程的时候没有 webapp-javaee6

    1. http://mvnrepository.com/artifact/org.codehaus.mojo.archetypes/webapp-javaee6/1.5 中有描述

  3. bash脚本中的普通数组和关联数组

    1. 普通数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0. ...

  4. jQuery Cycle Plugin的使用

    jQuery幻灯片效果或者Slideshow效果当中如果不考虑touch效果的话,jQuery Cycle插件实在是太强大了,各种高大上的动画效果,如果想加上touch效果可以结合本blog介绍的wi ...

  5. nav元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. [转载]DW数据仓库建模与ETL的实践技巧

    一.Data仓库的架构 Data仓库(Data Warehouse DW)是为了便于多维分析和多角度展现而将Data按特定的模式进行存储所建立起来的关系型Datcbase,它的Data基于OLTP源S ...

  7. Problem to create "New Database Diagram" in Microsoft SQL Server Management Studio for SQL Server 2012

    Error: when click "New Database Diagram", a error popped up and said "Attempted to re ...

  8. mobile web HTML5 app曾经的踩过坑(转)

    兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是 ...

  9. android 百度地图 通过剪裁图片添加 Marker

    初始化百度地图: private void initViews() { mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mM ...

  10. BZOJ4552: [Tjoi2016&Heoi2016]排序

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...