java打包压缩文件

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流进来

时间: 2024-10-19 20:42:52

java打包压缩文件的相关文章

Java生成压缩文件(zip、rar 格式)

jar坐标: <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.5</version> </dependency> 话不多说,直接上代码 package com.demo.student.util; import org.apache.tools.zip.ZipEntry; impo

Java实现压缩文件与解压缩文件

由于工作需要,需要将zip的压缩文件进行解压,经过调查发现,存在两个开源的工具包,一个是Apache的ant工具包,另一个就是Java api自带的工具包:但是Java自带的工具包存在问题:如果压缩或者解压的文件存在非英文字符(比如中文.以色列文),在操作的过程中会存在问题:MALFORMAL Eception-- 以下是通过Apache的zip工具包进行压缩和解压的代码(需要ant.jar): package com.steven.file; import java.io.File; impo

打包压缩文件命令

命令 参数 说明 -------------------------------------------------------------------------------- tar 用于对文件打包压缩或解压 打包并压缩文件 tar -czvf 压缩包名.tar.gz -c 打包文件 解压并展开压缩包 tar -xzvf 压缩包.tar.gz -x 解开压缩文件 -t 查看压缩文件内有哪些文件 -z 用Gzip压缩或解压 -j 用bzip2压缩或解压 -v 显示压缩或解压的过程 -f 目标文

Java ZIP压缩文件使用总结

做Java Web开发,有时候遇到将多个文件或者文件夹压缩成一个.zip文件,供前端下载.Java的JDK中提供一个java.util.zip的接口,供大家使用.如下图: 图上就是Java 的JDK提供的接口,但是压缩文件或者文件夹的时候,怎么使用上面的接口呢?下面我给出几个相关的接口,这些接口是下面压缩文件或者文件夹过程中使用到的. java.util.zip.ZipEntry; java.util.zip.ZipOutputStream; 下面的压缩过程主要是通过这两个接口压缩文件或者文件夹

java 打包jar文件以在没有安装JDK或JRE的机子上运行

前言: java号称“一次编译,到处运行”,但这有个前提,那就是你的机子上得安装java环境.对于开发人员或其他一些比较懂计算机的人来说这没什么,但是对于一些不懂计算机的人来说这会很麻烦,他们更希望的是东西拿来就能用,而不用另外安装其他软件.我们可以通过把jre和导出的jar文件封装在一起来实现这个效果. 方法其实很简单,就是配置好第三方库路径,再用自己的JRE里的javaw -jar xxx.jar 命令运行jar文件.详情如下: 1.把工程导出为jar文件,可借助Eclipse完成.本例为E

tar -- 打包压缩文件

先看一个例子: 1.将当前目录下所有.txt文件打包并压缩归档到文件this.tar.gz,我们可以使用 tar zcvf this.tar.gz ./*.txt 2.将当前目录下的this.tar.gz中的文件解压到当前目录我们可以使用 tar xzvf this.tar.gz ./ 下面介绍几个重要的参数: (一)打包部分参数      tar [-] A --catenate --concatenate | c --create | d --diff --compare | --delet

python2/python3 内存中打包/压缩文件

python2:(包含压缩选项,如果只打包,可以调整zipfile.ZIP_DEFLATED) import zipfile import StringIO class InMemoryZip(object): def __init__(self): # Create the in-memory file-like object self.in_memory_zip = StringIO.StringIO() def append(self, filename_in_zip, file_cont

r.js 打包压缩文件(依赖require)

r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求. 要使用r.js需下载r.js文件( 点我下载 ),将其放到你的项目根目录:还需要安装nodeJS(点我下载),以便通过命令行来执行r.js功能. 下面是我项目 幸福来敲门的目录结构.从index.html结构的data-mian可以看出模块的入口是app.js. app.js里面是这样一小段代码: 注释

ThinkPHP框架下如何用PHP自带的ZipArchive类打包压缩文件

public function downloadzip(){ $catid = $this->request->param('catid/d', 0); $id = $this->request->param('id/d', 0); $category = getCategory($catid); if (empty($category)) { $this->error('该栏目不存在!'); } $modelid = $category['modelid']; $field