[ 我们经常会使用WinZIP等压缩软件将文件进行压缩以方便传输。在java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP、JAR、GZIP等形
java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩
http://ant.apache.org/。下载地址:
org.apache.tools.zip 下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。 要压缩成zip文件,涉及到的问题如下: 1.将要压缩的文件添加到zip文件包中。 2.组织好要压缩的文件目录与压缩后的zip文件目录一致。 3.文件名以及文件夹名中文字符编码。 4.解压缩zip文件,并将解压缩后的文件及文件夹的组织形式要与压缩前的一致。 在设计该类的时候,我编写了一下几个方法: 第一个zip方法,将来填入要压缩的文件或文件夹路径,然后压缩成zip文件并保存到指定位置。代码如下:
1
/**
2
* 压缩文件或者文件夹 压缩采用gb2312编码,其它编码方式可能造成文件名与文件夹名使用中文的情况下压缩后为乱码。。。
3
*
4
*
@param
source
5
* 要压缩的文件或者文件夹
6
* 建议使用"c:/abc"或者"c:/abc/aaa.txt"这种形式来给定压缩路径
7
* 使用"c:\\abc" 或者"c:\\abc\\aaa.txt"这种形式来给定路径的话,可能导致出现压缩和解压缩路径意外故障。。。
8
*
@param
zipFileName
9
* 压缩后的zip文件名称 压缩后的目录组织与windows的zip压缩的目录组织相同。
10
* 会根据压缩的目录的名称,在压缩文件夹中创建一个改名的根目录, 其它压缩的文件和文件夹都在该目录下依照原来的文件目录组织形式
11
*
@throws
IOException
12
* 压缩文件的过程中可能会抛出IO异常,请自行处理该异常。
13
*/
14
public
static
void
ZIP(String source, String zipFileName)
15
throws
IOException {
16
ZipOutputStream zos
=
new
ZipOutputStream(
new
File(zipFileName));
17
18
//
设置压缩的时候文件名编码为gb2312
19
zos.setEncoding(
"
gb2312
"
);
20
//
System.out.println(zos.getEncoding());
21
22
File f
=
new
File(source);
23
24
if
(f.isDirectory()) {
25
//
如果直接压缩文件夹
26
ZIPDIR(source, zos, f.getName()
+
"
/
"
);
//
此处使用/来表示目录,如果使用\\来表示目录的话,会导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。
27
}
else
{
28
//
如果直接压缩文件
29
ZIPDIR(f.getPath(), zos,
new
File(f.get