java打包压缩文件
2016-06-16 11:39
387 查看
package com.it.simple.util;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Enumeration;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
/***
* 将压缩文件写出页面web下载
* @架包 commons-compress-1.8.jar
*
*/
public class ZipFileUtils{
public static void main(String[] args) throws FileNotFoundException, Exception {
/*ZipFileUtils main = new ZipFileUtils("c:/test1.zip");
main.createZipOut();
main.packToolFiles("D:/444", "444");
main.closeZipOut();*/
/*main = new Main("c:/test2.zip");
main.createZipOut();
main.packToolFiles("C:/test", "test");
main.closeZipOut();
Main.unZipToFolder("c:/test1.zip", "c:/test1");
Main.unZipToFolder("c:/test2.zip", "c:/test2");
*/
}
private OutputStream out = null;
private BufferedOutputStream bos = null;
private ZipArchiveOutputStream zaos = null;
private String zipFileName = null;
public ZipFileUtils(String zipname,HttpServletResponse response) {
this.zipFileName = zipname;
try{
String fileName = "文件打包下载_"+System.currentTimeMillis()+".zip";
response.setHeader("content-disposition", "attachment;filename=\""
+ new String(fileName.getBytes("gb2312"), "iso8859-1") + "\"");
//response.setContentType("APPLICATION/octet-stream");
response.setContentType("multipart/form-data");
out = response.getOutputStream();
}catch(Exception e){
}
}
public void createZipOut() throws FileNotFoundException, IOException {
// File f = new File(zipFileName);
// out = new FileOutputStream(f);
bos = new BufferedOutputStream(out);
zaos = new ZipArchiveOutputStream(bos);
zaos.setEncoding("GBK");
}
public void closeZipOut() throws Exception {
zaos.flush();
zaos.close();
bos.flush();
bos.close();
out.flush();
out.close();
}
/**
* 把一个目录打包到zip文件中的某目录
* @param dirpath 目录绝对地址
* @param pathName zip中目录
*/
public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException, IOException {
if (StringUtils.isNotEmpty(pathName)) {
pathName = pathName + File.separator;
}
packToolFiles(zaos, dirpath, pathName);
}
/**
* 把一个目录打包到一个指定的zip文件中
* @param dirpath 目录绝对地址
* @param pathName zip文件抽象地址
*/
public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName) throws FileNotFoundException, IOException {
ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);
File dir = new File(dirpath);
//返回此绝对路径下的文件
File[] files = dir.listFiles();
if (files == null || files.length < 1) {
return;
}
for (int i = 0; i < files.length; i++) {
//判断此文件是否是一个文件夹
if (files[i].isDirectory()) {
packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);
} else {
zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
zaos.closeArchiveEntry();
}
}
tempbaos.flush();
tempbaos.close();
tempbos.flush();
tempbos.close();
}
/**
* 把一个zip文件解压到一个指定的目录中
* @param zipfilename zip文件抽象地址
* @param outputdir 目录绝对地址
*/
public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
File zipfile = new File(zipfilename);
if (zipfile.exists()) {
outputdir = outputdir + File.separator;
FileUtils.forceMkdir(new File(outputdir));
ZipFile zf = new ZipFile(zipfile, "GBK");
Enumeration zipArchiveEntrys = zf.getEntries();
while (zipArchiveEntrys.hasMoreElements()) {
ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
if (zipArchiveEntry.isDirectory()) {
FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));
} else {
IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
}
}
} else {
throw new IOException("指定的解压文件不存在:\t" + zipfilename);
}
}
}
注释:如果是web项目传outputStream流进来
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Enumeration;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
/***
* 将压缩文件写出页面web下载
* @架包 commons-compress-1.8.jar
*
*/
public class ZipFileUtils{
public static void main(String[] args) throws FileNotFoundException, Exception {
/*ZipFileUtils main = new ZipFileUtils("c:/test1.zip");
main.createZipOut();
main.packToolFiles("D:/444", "444");
main.closeZipOut();*/
/*main = new Main("c:/test2.zip");
main.createZipOut();
main.packToolFiles("C:/test", "test");
main.closeZipOut();
Main.unZipToFolder("c:/test1.zip", "c:/test1");
Main.unZipToFolder("c:/test2.zip", "c:/test2");
*/
}
private OutputStream out = null;
private BufferedOutputStream bos = null;
private ZipArchiveOutputStream zaos = null;
private String zipFileName = null;
public ZipFileUtils(String zipname,HttpServletResponse response) {
this.zipFileName = zipname;
try{
String fileName = "文件打包下载_"+System.currentTimeMillis()+".zip";
response.setHeader("content-disposition", "attachment;filename=\""
+ new String(fileName.getBytes("gb2312"), "iso8859-1") + "\"");
//response.setContentType("APPLICATION/octet-stream");
response.setContentType("multipart/form-data");
out = response.getOutputStream();
}catch(Exception e){
}
}
public void createZipOut() throws FileNotFoundException, IOException {
// File f = new File(zipFileName);
// out = new FileOutputStream(f);
bos = new BufferedOutputStream(out);
zaos = new ZipArchiveOutputStream(bos);
zaos.setEncoding("GBK");
}
public void closeZipOut() throws Exception {
zaos.flush();
zaos.close();
bos.flush();
bos.close();
out.flush();
out.close();
}
/**
* 把一个目录打包到zip文件中的某目录
* @param dirpath 目录绝对地址
* @param pathName zip中目录
*/
public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException, IOException {
if (StringUtils.isNotEmpty(pathName)) {
pathName = pathName + File.separator;
}
packToolFiles(zaos, dirpath, pathName);
}
/**
* 把一个目录打包到一个指定的zip文件中
* @param dirpath 目录绝对地址
* @param pathName zip文件抽象地址
*/
public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName) throws FileNotFoundException, IOException {
ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);
File dir = new File(dirpath);
//返回此绝对路径下的文件
File[] files = dir.listFiles();
if (files == null || files.length < 1) {
return;
}
for (int i = 0; i < files.length; i++) {
//判断此文件是否是一个文件夹
if (files[i].isDirectory()) {
packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);
} else {
zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
zaos.closeArchiveEntry();
}
}
tempbaos.flush();
tempbaos.close();
tempbos.flush();
tempbos.close();
}
/**
* 把一个zip文件解压到一个指定的目录中
* @param zipfilename zip文件抽象地址
* @param outputdir 目录绝对地址
*/
public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
File zipfile = new File(zipfilename);
if (zipfile.exists()) {
outputdir = outputdir + File.separator;
FileUtils.forceMkdir(new File(outputdir));
ZipFile zf = new ZipFile(zipfile, "GBK");
Enumeration zipArchiveEntrys = zf.getEntries();
while (zipArchiveEntrys.hasMoreElements()) {
ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
if (zipArchiveEntry.isDirectory()) {
FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));
} else {
IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
}
}
} else {
throw new IOException("指定的解压文件不存在:\t" + zipfilename);
}
}
}
注释:如果是web项目传outputStream流进来
相关文章推荐
- 三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- 二十九、Java图形化界面设计——布局管理器之FlowLayout(流式布局)
- Java线程池原理及四种线程池的使用
- spring MVC 返回json
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
- java的Cloneable、Serializable接口
- JavaSE 之 ----- Socket 使用
- java设计模式
- Java中生成随机数的方法
- eclipse,android studio 签名打包,获取MD5, SHA1(应用的签名)
- spring--mybatis事务总结
- spring--事务原理
- java 之 23种设计模式
- Java中2+2==5解读
- java中break和continue源码解析
- java开发工具:Myeclipce、Eclipse向下或向上复制快捷键与系统冲突
- 很赞的struts.xml配置
- spring 拦截器过滤登录url 不验证是否登录其他的都拦截验证是否登录才能访问url
- ubuntu 安装jdk1.6
- java.lang.IllegalArgumentException