-----------------------帖子正文--------------------------
DirTraversal.java
ZipUtils.java
DirTraversal.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
package
com.once;
import
java.io.File;
import
java.util.ArrayList;
import
java.util.LinkedList;
/**
* 文件夹遍历
* @author once
*
*/
public
class
DirTraversal {
//no recursion
public
static
LinkedList<File> listLinkedFiles(String strPath) {
LinkedList<File> list =
new
LinkedList<File>();
File dir =
new
File(strPath);
File file[] = dir.listFiles();
for
(
int
i =
0
; i < file.length; i++) {
if
(file<i>.isDirectory())
list.add(file<i>);
else
System.out.println(file<i>.getAbsolutePath());
}
File tmp;
while
(!list.isEmpty()) {
tmp = (File) list.removeFirst();
if
(tmp.isDirectory()) {
file = tmp.listFiles();
if
(file ==
null
)
continue
;
for
(
int
i =
0
; i < file.length; i++) {
if
(file<i>.isDirectory())
list.add(file<i>);
else
System.out.println(file<i>.getAbsolutePath());
}
}
else
{
System.out.println(tmp.getAbsolutePath());
}
}
return
list;
}
//recursion
public
static
ArrayList<File> listFiles(String strPath) {
return
refreshFileList(strPath);
}
public
static
ArrayList<File> refreshFileList(String strPath) {
ArrayList<File> filelist =
new
ArrayList<File>();
File dir =
new
File(strPath);
File[] files = dir.listFiles();
if
(files ==
null
)
return
null
;
for
(
int
i =
0
; i < files.length; i++) {
if
(files<i>.isDirectory()) {
refreshFileList(files<i>.getAbsolutePath());
}
else
{
if
(files<i>.getName().toLowerCase().endsWith(
"zip"
))
filelist.add(files<i>);
}
}
return
filelist;
}
}
</i></i></i></i></i></i></i></i></i></i>
|
ZipUtils.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
package
com.once;
import
java.io.*;
import
java.util.ArrayList;
import
java.util.Collection;
import
java.util.Enumeration;
import
java.util.zip.ZipEntry;
import
java.util.zip.ZipException;
import
java.util.zip.ZipFile;
import
java.util.zip.ZipOutputStream;
/**
* Java utils 实现的Zip工具
*
* @author once
*/
public
class
ZipUtils {
private
static
final
int
BUFF_SIZE =
1024
*
1024
;
// 1M Byte
/**
* 批量压缩文件(夹)
*
* @param resFileList 要压缩的文件(夹)列表
* @param zipFile 生成的压缩文件
* @throws IOException 当压缩过程出错时抛出
*/
public
static
void
zipFiles(Collection<File> resFileList, File zipFile)
throws
IOException {
ZipOutputStream zipout =
new
ZipOutputStream(
new
BufferedOutputStream(
new
FileOutputStream(
zipFile), BUFF_SIZE));
for
(File resFile : resFileList) {
zipFile(resFile, zipout,
""
);
}
zipout.close();
}
/**
* 批量压缩文件(夹)
*
* @param resFileList 要压缩的文件(夹)列表
* @param zipFile 生成的压缩文件
* @param comment 压缩文件的注释
* @throws IOException 当压缩过程出错时抛出
*/
public
static
void
zipFiles(Collection<File> resFileList, File zipFile, String comment)
throws
IOException {
ZipOutputStream zipout =
new
ZipOutputStream(
new
BufferedOutputStream(
new
FileOutputStream(
zipFile), BUFF_SIZE));
for
(File resFile : resFileList) {
zipFile(resFile, zipout,
""
);
}
zipout.setComment(comment);
zipout.close();
}
/**
* 解压缩一个文件
*
* @param zipFile 压缩文件
* @param folderPath 解压缩的目标目录
* @throws IOException 当解压缩过程出错时抛出
*/
public
static
void
upZipFile(File zipFile, String folderPath)
throws
ZipException, IOException {
File desDir =
new
File(folderPath);
if
(!desDir.exists()) {
desDir.mkdirs();
}
ZipFile zf =
new
ZipFile(zipFile);
for
(Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry)entries.nextElement());
InputStream in = zf.getInputStream(entry);
String str = folderPath + File.separator + entry.getName();
str =
new
String(str.getBytes(
"8859_1"
),
"GB2312"
);
File desFile =
new
File(str);
if
(!desFile.exists()) {
File fileParentDir = desFile.getParentFile();
if
(!fileParentDir.exists()) {
fileParentDir.mkdirs();
}
desFile.createNewFile();
}
OutputStream out =
new
FileOutputStream(desFile);
byte
buffer[] =
new
byte
[BUFF_SIZE];
int
realLength;
while
((realLength = in.read(buffer)) >
0
) {
out.write(buffer,
0
, realLength);
}
in.close();
out.close();
}
}
/**
* 解压文件名包含传入文字的文件
*
* @param zipFile 压缩文件
* @param folderPath 目标文件夹
* @param nameContains 传入的文件匹配名
* @throws ZipException 压缩格式有误时抛出
* @throws IOException IO错误时抛出
*/
public
static
ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,
String nameContains)
throws
ZipException, IOException {
ArrayList<File> fileList =
new
ArrayList<File>();
File desDir =
new
File(folderPath);
if
(!desDir.exists()) {
desDir.mkdir();
}
ZipFile zf =
new
ZipFile(zipFile);
for
(Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry)entries.nextElement());
if
(entry.getName().contains(nameContains)) {
InputStream in = zf.getInputStream(entry);
String str = folderPath + File.separator + entry.getName();
str =
new
String(str.getBytes(
"8859_1"
),
"GB2312"
);
// str.getBytes("GB2312"),"8859_1" 输出
// str.getBytes("8859_1"),"GB2312" 输入
File desFile =
new
File(str);
if
(!desFile.exists()) {
File fileParentDir = desFile.getParentFile();
if
(!fileParentDir.exists()) {
fileParentDir.mkdirs();
}
desFile.createNewFile();
}
OutputStream out =
new
FileOutputStream(desFile);
byte
buffer[] =
new
byte
[BUFF_SIZE];
int
realLength;
while
((realLength = in.read(buffer)) >
0
) {
out.write(buffer,
0
, realLength);
}
in.close();
out.close();
fileList.add(desFile);
}
}
return
fileList;
}
/**
* 获得压缩文件内文件列表
*
* @param zipFile 压缩文件
* <a href="\"http://www.eoeandroid.com/home.php?mod=space&uid=7300\"" target="\"_blank\"">@return</a> 压缩文件内文件名称
* @throws ZipException 压缩文件格式有误时抛出
* @throws IOException 当解压缩过程出错时抛出
*/
public
static
ArrayList<String> getEntriesNames(File zipFile)
throws
ZipException, IOException {
ArrayList<String> entryNames =
new
ArrayList<String>();
Enumeration<?> entries = getEntriesEnumeration(zipFile);
while
(entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry)entries.nextElement());
entryNames.add(
new
String(getEntryName(entry).getBytes(
"GB2312"
),
"8859_1"
));
}
return
entryNames;
}
/**
* 获得压缩文件内压缩文件对象以取得其属性
*
* @param zipFile 压缩文件
* @return 返回一个压缩文件列表
* @throws ZipException 压缩文件格式有误时抛出
* @throws IOException IO操作有误时抛出
*/
public
static
Enumeration<?> getEntriesEnumeration(File zipFile)
throws
ZipException,
IOException {
ZipFile zf =
new
ZipFile(zipFile);
return
zf.entries();
}
/**
* 取得压缩文件对象的注释
*
* @param entry 压缩文件对象
* @return 压缩文件对象的注释
* @throws UnsupportedEncodingException
*/
public
static
String getEntryComment(ZipEntry entry)
throws
UnsupportedEncodingException {
return
new
String(entry.getComment().getBytes(
"GB2312"
),
"8859_1"
);
}
/**
* 取得压缩文件对象的名称
*
* @param entry 压缩文件对象
* @return 压缩文件对象的名称
* @throws UnsupportedEncodingException
*/
public
static
String getEntryName(ZipEntry entry)
throws
UnsupportedEncodingException {
return
new
String(entry.getName().getBytes(
"GB2312"
),
"8859_1"
);
}
/**
* 压缩文件
*
* @param resFile 需要压缩的文件(夹)
* @param zipout 压缩的目的文件
* @param rootpath 压缩的文件路径
* @throws FileNotFoundException 找不到文件时抛出
* @throws IOException 当压缩过程出错时抛出
*/
private
static
void
zipFile(File resFile, ZipOutputStream zipout, String rootpath)
throws
FileNotFoundException, IOException {
rootpath = rootpath + (rootpath.trim().length() ==
0
?
""
: File.separator)
+ resFile.getName();
rootpath =
new
String(rootpath.getBytes(
"8859_1"
),
"GB2312"
);
if
(resFile.isDirectory()) {
File[] fileList = resFile.listFiles();
for
(File file : fileList) {
zipFile(file, zipout, rootpath);
}
}
else
{
byte
buffer[] =
new
byte
[BUFF_SIZE];
BufferedInputStream in =
new
BufferedInputStream(
new
FileInputStream(resFile),
BUFF_SIZE);
zipout.putNextEntry(
new
ZipEntry(rootpath));
int
realLength;
while
((realLength = in.read(buffer)) != -
1
) {
zipout.write(buffer,
0
, realLength);
}
in.close();
zipout.flush();
zipout.closeEntry();
}
}
}
|