- 浏览: 696559 次
- 性别:
- 来自: 杭州
文章分类
最新评论
用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 1216用String.substring方法,不小心会有越界异 ... -
java -D参数简化加入多个jar
2008-05-30 11:22 1987java命令引入jar时可以-cp参数,但时-cp不 ... -
[原]自己实现的优先队列 PriorityQueue
2008-05-08 23:08 2099java库里的PriorityQueue无法满足我,它 ... -
poi会中文乱码,Jexcelapi不会
2007-03-21 19:06 2268目前比较流行的生成Excel文件的有poi和Jexcelapi ... -
itest生成pdf中文为空白
2007-03-21 19:52 2562要下载iTextAsian.jar地址: http://prd ... -
[转载]jsp 实现 word, excel
2007-08-22 13:15 1492这里使用一个小技巧,就是先将其转换为可编辑的JSP文件,然后再 ... -
jsp 提交表单中文问题解决
2007-09-09 09:47 1459用过虑器,但只对post有效,get方式请看。http ... -
Weblogic 中部署 Web 应用程序
2007-09-22 18:48 34191、安装好weblogic8.1 2、 ... -
weblogic 8.1.4服务器挂起,出现StuckThreadMaxTime错误
2007-10-06 21:10 9042前几天用spring+hibernate+struts写了个增 ... -
weblogic8.1作为windows服务运行
2007-10-06 23:02 1651实验室机房里安装的Weblogic 每次想打开网页 ... -
jsp 下载文件
2007-10-16 23:57 2010jsp 直接输出二进制文件怎么办呢? downl ... -
jstl 1.0 formatDate yyyy-mm 不能正常工作
2007-10-25 22:38 1103jstl 1.0 formatDate yyyy-m ... -
jxl 写 excel
2007-10-29 10:52 1321项目中要写excel,把这个例子写出来,以后可以看 ... -
jxl 读 excel
2007-10-29 11:04 1461与写对应的是读. package net.bl ... -
ant build 出现 warning modified in the future
2007-12-13 23:13 1744今天同学想rebuild项目源码,但出现上面情况。 ... -
ant 编译特定包下面的源文件
2007-12-15 12:13 1712项目中有applet,现在想只编译applet包下 ... -
生产者-消费者
2008-01-24 11:36 1252这学期,应聘的时候有一些是线程相关的,虽然自己对线程编 ... -
Java读RTF乱码问题
2008-02-01 17:05 6897这几天想用Java读富文档。用javax.swing. ... -
System.in重复接收用户输入一行命令
2008-03-11 21:49 1647以前想用循环来System.in (或是其它输入方式老 ... -
下载文件保存提示文件名显示中文
2008-03-16 14:29 1191用URLEncoder转换。 String file ...
相关推荐
本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...
java.util.zip工具包里面的类实现文件夹的zip压缩。具体会用到FileInputStream,CheckedOutputStream,BufferedInputStream,ZipOutputStream.
应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包
### Java将文件压缩为ZIP的方法 #### 知识点概览 本文主要介绍如何使用Java实现文件的ZIP压缩功能,并提供了完整的代码示例。通过学习本文,你可以掌握以下几个知识点: 1. 使用`java.util.zip`包中的类进行文件...
### Java压缩文件目录成ZIP包最新技巧 在Java开发中,对文件或目录进行压缩是一项常见且实用的功能。本文将详细介绍如何使用`java.util.zip`包中的类来压缩文件及目录,并解决其中的一个常见问题——中文文件名或...
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....
在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...
对于解压缩ZIP文件,`ZipFile`类也提供了`extractAll(String outputPath)`方法,可以将ZIP文件解压到指定的目录下。如果ZIP文件被加密,我们需要在解压前提供正确的密码。 ```java String outputFolder = "path/to/...
在Java编程环境中,处理压缩和解压缩文件是常见的任务,主要涉及到两个标准库中的类:`java.util.zip`和第三方库如Apache Commons Compress。本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关...
本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...
### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....
* 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件或文件夹路径 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在...
使用java的zip压缩库 对文件和文件夹实现压缩
解压缩ZIP文件的过程则相反,需要使用`ZipInputStream`从ZIP文件中读取`ZipEntry`并写入目标目录。以下是一个基本的解压缩方法: 1. 打开ZIP文件的`FileInputStream`。 2. 创建`ZipInputStream`,从输入流中读取ZIP...
- **解压缩任务**:使用`unzip`任务可以解压缩Zip文件到指定的目标目录。 - **Ant脚本**:Ant通过XML格式的构建文件来定义任务,这使得整个过程可配置且易于自动化。 在实际应用中,如果你的项目依赖于这两个库,...
在给定的压缩包文件中,包含了一个名为"JAVA解压ZIP格式的压缩包.docx"的文档,这可能是对解压过程的详细说明或补充信息。在实际操作中,你可以将上述代码与这个文档结合,以获得更深入的理解和实践指导。
### Java 打包目录文件为 ZIP 的实现方法 在 Java 中,经常需要处理文件压缩与解压的操作。本文将详细介绍如何使用 Java 实现目录文件的 ZIP 压缩功能,并提供一个具体的示例代码。 #### 核心概念 1. **Java Zip ...
java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API...