Java 实现文件压缩工具类
package com.wdxc.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import org.apache.log4j.Logger; /**
* zip文件压缩工具类
*
* @author : wangbo
*/
public class ZipCompressor {
private Logger logger = Logger.getLogger(ZipCompressor.class);
static final int BUFFER = 8192;
private File zipFile; /**
* 压缩文件构造函数
* @param pathName 压缩的文件存放目录
*/
public ZipCompressor(String pathName) {
zipFile = new File(pathName);
} /**
* 执行压缩操作
* @param srcPathName 被压缩的文件/文件夹
*/
public void compressExe(String srcPathName) {
File file = new File(srcPathName);
if (!file.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());
ZipOutputStream out = new ZipOutputStream(cos); String basedir = "";
compressByType(file, out, basedir);
out.close();
} catch (Exception e) {
e.printStackTrace();
logger.error("执行压缩操作时发生异常:"+e);
throw new RuntimeException(e);
}
} /**
* 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
* @param file
* @param out
* @param basedir
*/
private void compressByType(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文件 */
if (file.isDirectory()) {
logger.info("压缩:" + basedir + file.getName());
this.compressDirectory(file, out, basedir);
} else {
logger.info("压缩:" + basedir + file.getName());
this.compressFile(file, out, basedir);
}
} /**
* 压缩一个目录
* @param dir
* @param out
* @param basedir
*/
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()){
return;
} File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
compressByType(files[i], out, basedir + dir.getName() + "/");
}
} /**
* 压缩一个文件
* @param file
* @param out
* @param basedir
*/
private void compressFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
} public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compressExe("E:\\ftpdown"); }
}
Java 实现文件压缩工具类的更多相关文章
- java下载文件工具类
java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ...
- java csv 文件 操作类
一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...
- java的文件操作类File
java.io.File类,是java获取文件/文件夹的所有属性,和完成所有相关操作的类 例子: package test.file.IO; import java.io.*; public clas ...
- 【56】java本地文件File类详解
1.java类的介绍 public class File extends Object implements Serializable, Comparable<File> 文件和目录路径名 ...
- java FileUtils 文件工具类
package com.sicdt.library.core.utils; import java.io.BufferedInputStream; import java.io.File; impor ...
- java基础文件,File类
此文参考自"Java SE程序设计" 编著: 青岛东合信息技术有限公司 算是做笔记,以后想看可以翻阅,顺便分享出来大家可以参照.如有侵权,请联系本人删除 文件 文件是相关记录或放在 ...
- java FileUtil(文件操作类)
package tools; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; i ...
- Java IO(文件操作工具类)
FileOperate实现的功能: 1. 返回文件夹中所有文件列表 2. 读取文本文件内容 3. 新建目录 4. 新建多级目录 5. 新建文件 6. 有编码方式的创建文件 7. 删除文件 8. 删除指 ...
- 最近工作用到压缩,写一个zip压缩工具类
package test; import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream ...
随机推荐
- 4-3 重构发送post请求
当创建好一个post请求后 怎么测试呢?
- hibernate中怎样配置两个联合属性为唯一约束(非联合主键)
Annotation中配置: @Table元素包括了一个schema和一个catalog属性,如果需要可以指定相应的值. 结合使用@UniqueConstraint注解可以定义表的唯一约束(uniqu ...
- 学习java之路 简单日历查询代码
/** * 31天的 1, 3, 5, 7, 8, 10 ,12 30天的 4, 6,9,11 28天(平年) 2 29天(闰年) 2 */ class Demo{ public static voi ...
- VB批量替换文本字符
Private Sub Command1_Click()Open App.Path & "\abc.txt" For Binary As #1a = Input(LOF(1 ...
- 高斯混合模型(GMM) - 混合高斯回归(GMR)
http://www.zhihuishi.com/source/2073.html 高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲 ...
- session实现原理(阿里面试题)
问: 当用户登录某网站后,向服务器发送一个请求,服务器如何判断是这个用户请求的 首先,你要明白一点,最初http协议在设计的时候,主要面向当时的web1.0网站,他们不需要知道是谁来访问,只需要向外界 ...
- arm 执行 交叉编译完成的可执行文件时 出现premission denied 问题
我用的tftp传过去的文件 然后传完 执行的时候 出现了premission denied (权限不够)得问题 解决方法 就是添加权限 chmod 777 filename
- 软件测试---测试模型(V、W、H)
一.V测试模型 1.V模型示意图: 单元测试:又叫模块测试,针对软件设计中的最小单位—>程序模块 集成测试:又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序.递增测试. 系统测试:把 ...
- Promise注意点
一. Promise API 概述 var p = new Promise( function(resolve,reject){ // resolve(..) 用于决议 / 完成这个 promise ...
- String工具类
String工具类 问题描述 MAVEN依赖 代码成果 问题描述 很多时候我们需要对字符串进行很多固定的操作,而这些操作在JDK/JRE中又没有预置,于是我们想到了apache-commons组件,但 ...