1
package
util;
2
3
/**/
/*
本实例采用递归的方法,把指定的目录(包括子目录)压缩成一个ZIP文件。
4
原理是:为指定目录的所有文件创建一个ZipEntry(压缩流入口),然后把文件写进去;当遇到子目录时,调用递归函数,把它压缩成另一个zip文件,当作一般文件写进去.
5
//使用方法 java Zip <目录名>
6
*/
7
8
//
java.util.zip包提供了数据压缩和解压缩的类
9
import
java.io.
*
;
10
import
java.util.zip.
*
;
11
12
13
public
class
FileZip
{
14
15
static
final
int
BUFFER
=
2048
;
16
static
boolean
flag
=
false
;
17
18
public
static
void
main(String args[])
throws
IOException
{
19
File file
=
new
File(args[
0
]);
20
FileInputStream file1
=
new
FileInputStream(ZipSubdirectory(file));
21
}
22
23
//
ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN")
24
public
static
File ZipSubdirectory(File myDir)
throws
IOException
{
25
//
创建缓冲输入流BufferedInputStream
26
BufferedInputStream origin
=
null
;
27
//
创建ZipOutputStream对象,将向它传递希望写入文件的输出流
28
File zipFile
=
new
File(myDir.getName()
+
"
.zip
"
);
29
FileOutputStream fos
=
new
FileOutputStream(zipFile);
30
ZipOutputStream out
=
new
ZipOutputStream(
new
BufferedOutputStream(fos,BUFFER));
31
//
dirContents[]获取当前目录(myDir)所有文件对象(包括子目录名)
32
File dirContents[]
=
myDir.listFiles();
33
//
创建临时文件tempFile,使用后删除
34
File tempFile
=
null
;
35
try
{
36
//
处理当前目录所有文件对象,包括子目录
37
for
(
int
i
=
0
;i
<
dirContents.length;i
++
)
{
38
//
使用递归方法将当前目录的子目录转成一个ZIP文件,并作为一个ENTRY加进"ORIGIN"
39
if
(dirContents[i].isDirectory())
{
40
tempFile
=
ZipSubdirectory(dirContents[i]);
41
flag
=
true
;
42
}
43
//
如果当前文件不是子目录
44
else
{
45
tempFile
=
dirContents[i];
46
//
flag标记tempFile是否由子目录压缩成的ZIP文件
47
flag
=
false
;
48
}
49
50
System.out.println(
"
Compress file:
"
+
tempFile.getName());
51
52
FileInputStream fis
=
new
FileInputStream(tempFile);
53
origin
=
new
BufferedInputStream(fis,BUFFER);
54
//
为被读取的文件创建压缩条目
55
ZipEntry entry
=
new
ZipEntry(tempFile.getName());
56
byte
data[]
=
new
byte
[BUFFER];
57
int
count;
58
//
在向ZIP输出流写入数据之前,必须首先使用out.putNextEntry(entry); 方法安置压缩条目对象
59
out.putNextEntry(entry);
60
61
//
向ZIP 文件写入数据
62
while
((count
=
origin.read(data,
0
,BUFFER))
!=-
1
)
{
63
out.write(data,
0
,count);
64
}
65
66
//
tempFile是临时生成的ZIP文件,删除它
67
if
(flag
==
true
)
{
68
flag
=
tempFile.delete();
69
System.out.println(
"
Delete file:
"
+
tempFile.getName()
+
flag);
70
}
71
//
关闭输入流
72
origin.close();
73
}
74
out.close();
75
}
76
catch
(Exception e)
{System.out.println(e);
77
}
78
//
递归返回
79
return
zipFile;
80
}
81
}
82
posted on 2006-04-21 17:11
kelven 阅读(1011)
评论(0) 编辑 收藏 所属分类:
java