- 浏览: 690017 次
- 性别:
- 来自: 杭州
文章分类
最新评论
用java好久了,还没有写个压缩文件的示例,昨晚弄了下,把写下来,以后可以看。
关系到
java.util.zip.ZipEntry
java.util.zip.ZipOutputStream
如果要解决中文文件名问题,用到ant.jar
这两个类。
package net.blogjava.chenlb.zip;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
//用ant.jar的zip.*可以解决中文文件名问题
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩文件.
* 2007-10-17 下午11:19:50
* @author chenlb
*/
public class RecursiveZip {
public static void main(String[] args) {
RecursiveZip recursiveZip = new RecursiveZip();
System.out.println("====开始====");
try {
OutputStream os = new FileOutputStream("e:/doc-recursive.zip");
BufferedOutputStream bs = new BufferedOutputStream(os);
ZipOutputStream zo = new ZipOutputStream(bs);
//recursiveZip.zip("e:/recursive-zip/中文文件名.txt", new File("e:/recursive-zip"), zo, true, true);
recursiveZip.zip("e:/recursive-zip", new File("e:/recursive-zip"), zo, true, true);
zo.closeEntry();
zo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("====完成====");
}
/**
* @param path 要压缩的路径, 可以是目录, 也可以是文件.
* @param basePath 如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录, 如果为null它只压缩文件, 不解压目录.
* @param zo 压缩输出流
* @param isRecursive 是否递归
* @param isOutBlankDir 是否输出空目录, 要使输出空目录为true,同时baseFile不为null.
* @throws IOException
*/
public void zip(String path, File basePath, ZipOutputStream zo, boolean isRecursive, boolean isOutBlankDir) throws IOException {
File inFile = new File(path);
File[] files = new File[0];
if(inFile.isDirectory()) { //是目录
files = inFile.listFiles();
} else if(inFile.isFile()) { //是文件
files = new File[1];
files[0] = inFile;
}
byte[] buf = new byte[1024];
int len;
//System.out.println("baseFile: "+baseFile.getPath());
for(int i=0; i<files.length; i++) {
String pathName = "";
if(basePath != null) {
if(basePath.isDirectory()) {
pathName = files[i].getPath().substring(basePath.getPath().length()+1);
} else {//文件
pathName = files[i].getPath().substring(basePath.getParent().length()+1);
}
} else {
pathName = files[i].getName();
}
System.out.println(pathName);
if(files[i].isDirectory()) {
if(isOutBlankDir && basePath != null) {
zo.putNextEntry(new ZipEntry(pathName+"/")); //可以使空目录也放进去
}
if(isRecursive) { //递归
zip(files[i].getPath(), basePath, zo, isRecursive, isOutBlankDir);
}
} else {
FileInputStream fin = new FileInputStream(files[i]);
zo.putNextEntry(new ZipEntry(pathName));
while((len=fin.read(buf))>0) {
zo.write(buf,0,len);
}
fin.close();
}
}
}
}
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
//用ant.jar的zip.*可以解决中文文件名问题
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩文件.
* 2007-10-17 下午11:19:50
* @author chenlb
*/
public class RecursiveZip {
public static void main(String[] args) {
RecursiveZip recursiveZip = new RecursiveZip();
System.out.println("====开始====");
try {
OutputStream os = new FileOutputStream("e:/doc-recursive.zip");
BufferedOutputStream bs = new BufferedOutputStream(os);
ZipOutputStream zo = new ZipOutputStream(bs);
//recursiveZip.zip("e:/recursive-zip/中文文件名.txt", new File("e:/recursive-zip"), zo, true, true);
recursiveZip.zip("e:/recursive-zip", new File("e:/recursive-zip"), zo, true, true);
zo.closeEntry();
zo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("====完成====");
}
/**
* @param path 要压缩的路径, 可以是目录, 也可以是文件.
* @param basePath 如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录, 如果为null它只压缩文件, 不解压目录.
* @param zo 压缩输出流
* @param isRecursive 是否递归
* @param isOutBlankDir 是否输出空目录, 要使输出空目录为true,同时baseFile不为null.
* @throws IOException
*/
public void zip(String path, File basePath, ZipOutputStream zo, boolean isRecursive, boolean isOutBlankDir) throws IOException {
File inFile = new File(path);
File[] files = new File[0];
if(inFile.isDirectory()) { //是目录
files = inFile.listFiles();
} else if(inFile.isFile()) { //是文件
files = new File[1];
files[0] = inFile;
}
byte[] buf = new byte[1024];
int len;
//System.out.println("baseFile: "+baseFile.getPath());
for(int i=0; i<files.length; i++) {
String pathName = "";
if(basePath != null) {
if(basePath.isDirectory()) {
pathName = files[i].getPath().substring(basePath.getPath().length()+1);
} else {//文件
pathName = files[i].getPath().substring(basePath.getParent().length()+1);
}
} else {
pathName = files[i].getName();
}
System.out.println(pathName);
if(files[i].isDirectory()) {
if(isOutBlankDir && basePath != null) {
zo.putNextEntry(new ZipEntry(pathName+"/")); //可以使空目录也放进去
}
if(isRecursive) { //递归
zip(files[i].getPath(), basePath, zo, isRecursive, isOutBlankDir);
}
} else {
FileInputStream fin = new FileInputStream(files[i]);
zo.putNextEntry(new ZipEntry(pathName));
while((len=fin.read(buf))>0) {
zo.write(buf,0,len);
}
fin.close();
}
}
}
}
发表评论
-
不抛出越界异常的求子串方法
2008-06-18 14:36 1190用String.substring方法,不小心会有越界异 ... -
java -D参数简化加入多个jar
2008-05-30 11:22 1933java命令引入jar时可以-cp参数,但时-cp不 ... -
[原]自己实现的优先队列 PriorityQueue
2008-05-08 23:08 2068java库里的PriorityQueue无法满足我,它 ... -
poi会中文乱码,Jexcelapi不会
2007-03-21 19:06 2235目前比较流行的生成Excel文件的有poi和Jexcelapi ... -
itest生成pdf中文为空白
2007-03-21 19:52 2506要下载iTextAsian.jar地址: http://prd ... -
[转载]jsp 实现 word, excel
2007-08-22 13:15 1457这里使用一个小技巧,就是先将其转换为可编辑的JSP文件,然后再 ... -
jsp 提交表单中文问题解决
2007-09-09 09:47 1425用过虑器,但只对post有效,get方式请看。http ... -
Weblogic 中部署 Web 应用程序
2007-09-22 18:48 33841、安装好weblogic8.1 2、 ... -
weblogic 8.1.4服务器挂起,出现StuckThreadMaxTime错误
2007-10-06 21:10 8986前几天用spring+hibernate+struts写了个增 ... -
weblogic8.1作为windows服务运行
2007-10-06 23:02 1614实验室机房里安装的Weblogic 每次想打开网页 ... -
jsp 下载文件
2007-10-16 23:57 1971jsp 直接输出二进制文件怎么办呢? downl ... -
jstl 1.0 formatDate yyyy-mm 不能正常工作
2007-10-25 22:38 1057jstl 1.0 formatDate yyyy-m ... -
jxl 写 excel
2007-10-29 10:52 1290项目中要写excel,把这个例子写出来,以后可以看 ... -
jxl 读 excel
2007-10-29 11:04 1409与写对应的是读. package net.bl ... -
ant build 出现 warning modified in the future
2007-12-13 23:13 1656今天同学想rebuild项目源码,但出现上面情况。 ... -
ant 编译特定包下面的源文件
2007-12-15 12:13 1668项目中有applet,现在想只编译applet包下 ... -
生产者-消费者
2008-01-24 11:36 1219这学期,应聘的时候有一些是线程相关的,虽然自己对线程编 ... -
Java读RTF乱码问题
2008-02-01 17:05 6844这几天想用Java读富文档。用javax.swing. ... -
System.in重复接收用户输入一行命令
2008-03-11 21:49 1608以前想用循环来System.in (或是其它输入方式老 ... -
下载文件保存提示文件名显示中文
2008-03-16 14:29 1144用URLEncoder转换。 String file ...
相关推荐
java.util.zip工具包里面的类实现文件夹的zip压缩。具体会用到FileInputStream,CheckedOutputStream,BufferedInputStream,ZipOutputStream.
应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包
java压缩文件成zip实现无乱码 内置类与jar包
java控制指定路径下的文件夹压缩成zip格式。 java将zip压缩包解压成为文件夹。直接使用io流进行操作,不需借助其他jar包
Java把文件压缩成zip,粘贴在项目中即可使用
* 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件或文件夹路径 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在...
使用java的zip压缩库 对文件和文件夹实现压缩
java 解压缩zip文件 java 解压缩zip文件 java 解压缩zip文件
这几天做一个操作docx的文档的功能,Apache的POI功能有限,就参考了相关资料写的一个Java压缩和解压zip文件的工具类。全部使用的是Java自带的类库,中文的文件名会有乱码的问题。
zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java zip 压缩 文件 Java
使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败。本人经过一段时间的摸索和实践...
java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip...
java压缩解压ZIP
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
java实现的解压与压缩的类 其中有zip和rar类型的 还包括了所需的架包
java 中压缩ZIP格式源码,仅供参考。
JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码
包含了使用的jar包,以及一个Java类,实现了使用Java对多目录多层级的文件进行打包,以及对ZIP包进行解压缩的操作。
// 设置压缩文件入口entry,为被读取的文件创建压缩条目 File tempFile = new File(fileArray[i].toString()); String rootStr = file.getPath(); String entryStr = null; // entry以相对路径的...
java实现压缩和压缩zip格式文件的功能,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。