java实现zip压缩文件/文件夹
2016-11-19 20:26
836 查看
由于java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream。
以下是代码:
[java] view
plain copy
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 org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* @ClassName: ZipCompressor
* @CreateTime Apr 28, 2013 1:12:16 PM
* @author : Mayi
* @Description: 压缩文件的通用工具类-采用org.apache.tools.zip.ZipOutputStream实现,较复杂。
*
*/
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);
}
}
}
后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
[java] view
plain copy
import java.io.File;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
/**
* @ClassName: ZipCompressorByAnt
* @CreateTime Apr 28, 2013 1:23:45 PM
* @author : Mayi
* @Description: 压缩文件的通用工具类-采用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
*
*/
public class ZipCompressorByAnt {
private File zipFile;
/**
* 压缩文件构造函数
* @param pathName 最终压缩生成的压缩文件:目录+压缩文件名.zip
*/
public ZipCompressorByAnt(String finalFile) {
zipFile = new File(finalFile);
}
/**
* 执行压缩操作
* @param srcPathName 需要被压缩的文件/文件夹
*/
public void compressExe(String srcPathName) {
File srcdir = new File(srcPathName);
if (!srcdir.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
Project prj = new Project();
Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipFile);
FileSet fileSet = new FileSet();
fileSet.setProject(prj);
fileSet.setDir(srcdir);
//fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java");
//fileSet.setExcludes(...); //排除哪些文件或文件夹
zip.addFileset(fileSet);
zip.execute();
}
}
测试一下
Java代码
package net.szh.zip;
public class TestZip {
public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compress("E:\\test");
ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");
zca.compress("E:\\test");
}
}
参考自:ITeye
以下是代码:
[java] view
plain copy
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 org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* @ClassName: ZipCompressor
* @CreateTime Apr 28, 2013 1:12:16 PM
* @author : Mayi
* @Description: 压缩文件的通用工具类-采用org.apache.tools.zip.ZipOutputStream实现,较复杂。
*
*/
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);
}
}
}
后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
[java] view
plain copy
import java.io.File;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
/**
* @ClassName: ZipCompressorByAnt
* @CreateTime Apr 28, 2013 1:23:45 PM
* @author : Mayi
* @Description: 压缩文件的通用工具类-采用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
*
*/
public class ZipCompressorByAnt {
private File zipFile;
/**
* 压缩文件构造函数
* @param pathName 最终压缩生成的压缩文件:目录+压缩文件名.zip
*/
public ZipCompressorByAnt(String finalFile) {
zipFile = new File(finalFile);
}
/**
* 执行压缩操作
* @param srcPathName 需要被压缩的文件/文件夹
*/
public void compressExe(String srcPathName) {
File srcdir = new File(srcPathName);
if (!srcdir.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
Project prj = new Project();
Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipFile);
FileSet fileSet = new FileSet();
fileSet.setProject(prj);
fileSet.setDir(srcdir);
//fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java");
//fileSet.setExcludes(...); //排除哪些文件或文件夹
zip.addFileset(fileSet);
zip.execute();
}
}
测试一下
Java代码
package net.szh.zip;
public class TestZip {
public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compress("E:\\test");
ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");
zca.compress("E:\\test");
}
}
参考自:ITeye
相关文章推荐
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)
- java实现zip压缩文件/文件夹
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java实现zip压缩文件/文件夹
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java实现zip压缩文件/文件夹
- java web 实现把文件夹下的所有文件压缩成zip并实现下载(原文链接)http://blog.csdn.net/sxdtzhaoxinguo/article/details/20550537)
- java来实现zip压缩文件或者文件夹
- Java实现将文件或者文件夹压缩成zip
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java将文件夹中的多个文件(包含子文件夹)压缩成zip文件
- java实现将ZIP压缩文件解压的工具类
- java实现zip压缩文件
- Java将指定文件/文件夹压缩成zip、rar压缩文件
- java实现将ZIP压缩文件解压的工具类
- java 文件和文件夹的压缩实现