DirTraversal.java
view sourceprint?
01 package com.once;
02
03 import java.io.File;
04 import java.util.ArrayList;
05 import java.util.LinkedList;
06 /**
07 * 文件夹遍历
08 * @author once
09 *
10 */
11 public class DirTraversal {
12
13 //no recursion
14 public static LinkedList<File> listLinkedFiles(String strPath) {
15 LinkedList<File> list = new LinkedList<File>();
16 File dir = new File(strPath);
17 File file[] = dir.listFiles();
18 for (int i = 0; i < file.length; i++) {
19 if (file[i].isDirectory())
20 list.add(file[i]);
21 else
22 System.out.println(file[i].getAbsolutePath());
23 }
24 File tmp;
25 while (!list.isEmpty()) {
26 tmp = (File) list.removeFirst();
27 if (tmp.isDirectory()) {
28 file = tmp.listFiles();
29 if (file == null)
30 continue;
31 for (int i = 0; i < file.length; i++) {
32 if (file[i].isDirectory())
33 list.add(file[i]);
34 else
35 System.out.println(file[i].getAbsolutePath());
36 }
37 } else {
38 System.out.println(tmp.getAbsolutePath());
39 }
40 }
41 return list;
42 }
43
44
45 //recursion
46 public static ArrayList<File> listFiles(String strPath) {
47 return refreshFileList(strPath);
48 }
49
50 public static ArrayList<File> refreshFileList(String strPath) {
51 ArrayList<File> filelist = new ArrayList<File>();
52 File dir = new File(strPath);
53 File[] files = dir.listFiles();
54
55 if (files == null)
56 return null;
57 for (int i = 0; i < files.length; i++) {
58 if (files[i].isDirectory()) {
59 refreshFileList(files[i].getAbsolutePath());
60 } else {
61 if(files[i].getName().toLowerCase().endsWith("zip"))
62 filelist.add(files[i]);
63 }
64 }
65 return filelist;
66 }
67 }
[代码] ZipUtils.java
view sourceprint?
001 package com.once;
002
003 import java.io.*;
004 import java.util.ArrayList;
005 import java.util.Collection;
006 import java.util.Enumeration;
007 import java.util.zip.ZipEntry;
008 import java.util.zip.ZipException;
009 import java.util.zip.ZipFile;
010 import java.util.zip.ZipOutputStream;
011
012 /**
013 * Java utils 实现的Zip工具
014 *
015 * @author once
016 */
017 public class ZipUtils {
018 private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte
019
020 /**
021 * 批量压缩文件(夹)
022 *
023 * @param resFileList 要压缩的文件(夹)列表
024 * @param zipFile 生成的压缩文件
025 * @throws IOException 当压缩过程出错时抛出
026 */
027 public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {
028 ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
029 zipFile), BUFF_SIZE));
030 for (File resFile : resFileList) {
031 zipFile(resFile, zipout, "");
032 }
033 zipout.close();
034 }
035
036 /**
037 * 批量压缩文件(夹)
038 *
039 * @param resFileList 要压缩的文件(夹)列表
040 * @param zipFile 生成的压缩文件
041 * @param comment 压缩文件的注释
042 * @throws IOException 当压缩过程出错时抛出
043 */
044 public static void zipFiles(Collection<File> resFileList, File zipFile, String comment)
045 throws IOException {
046 ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
047 zipFile), BUFF_SIZE));
048 for (File resFile : resFileList) {
049 zipFile(resFile, zipout, "");
050 }
051 zipout.setComment(comment);
052 zipout.close();
053 }
054
055 /**
056 * 解压缩一个文件
057 *
058 * @param zipFile 压缩文件
059 * @param folderPath 解压缩的目标目录
060 * @throws IOException 当解压缩过程出错时抛出
061 */
062 public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {
063 File desDir = new File(folderPath);
064 if (!desDir.exists()) {
065 desDir.mkdirs();
066 }
067 ZipFile zf = new ZipFile(zipFile);
068 for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
069 ZipEntry entry = ((ZipEntry)entries.nextElement());
070 InputStream in = zf.getInputStream(entry);
071 String str = folderPath + File.separator + entry.getName();
072 str = new String(str.getBytes("8859_1"), "GB2312");
073 File desFile = new File(str);
074 if (!desFile.exists()) {
075 File fileParentDir = desFile.getParentFile();
076 if (!fileParentDir.exists()) {
077 fileParentDir.mkdirs();
078 }
079 desFile.createNewFile();
080 }
081 OutputStream out = new FileOutputStream(desFile);
082 byte buffer[] = new byte[BUFF_SIZE];
083 int realLength;
084 while ((realLength = in.read(buffer)) > 0) {
085 out.write(buffer, 0, realLength);
086 }
087 in.close();
088 out.close();
089 }
090 }
091
092 /**
093 * 解压文件名包含传入文字的文件
094 *
095 * @param zipFile 压缩文件
096 * @param folderPath 目标文件夹
097 * @param nameContains 传入的文件匹配名
098 * @throws ZipException 压缩格式有误时抛出
099 * @throws IOException IO错误时抛出
100 */
101 public static ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,
102 String nameContains) throws ZipException, IOException {
103 ArrayList<File> fileList = new ArrayList<File>();
104
105 File desDir = new File(folderPath);
106 if (!desDir.exists()) {
107 desDir.mkdir();
108 }
109
110 ZipFile zf = new ZipFile(zipFile);
111 for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
112 ZipEntry entry = ((ZipEntry)entries.nextElement());
113 if (entry.getName().contains(nameContains)) {
114 InputStream in = zf.getInputStream(entry);
115 String str = folderPath + File.separator + entry.getName();
116 str = new String(str.getBytes("8859_1"), "GB2312");
117 // str.getBytes("GB2312"),"8859_1" 输出
118 // str.getBytes("8859_1"),"GB2312" 输入
119 File desFile = new File(str);
120 if (!desFile.exists()) {
121 File fileParentDir = desFile.getParentFile();
122 if (!fileParentDir.exists()) {
123 fileParentDir.mkdirs();
124 }
125 desFile.createNewFile();
126 }
127 OutputStream out = new FileOutputStream(desFile);
128 byte buffer[] = new byte[BUFF_SIZE];
129 int realLength;
130 while ((realLength = in.read(buffer)) > 0) {
131 out.write(buffer, 0, realLength);
132 }
133 in.close();
134 out.close();
135 fileList.add(desFile);
136 }
137 }
138 return fileList;
139 }
140
141 /**
142 * 获得压缩文件内文件列表
143 *
144 * @param zipFile 压缩文件
145 * @return 压缩文件内文件名称
146 * @throws ZipException 压缩文件格式有误时抛出
147 * @throws IOException 当解压缩过程出错时抛出
148 */
149 public static ArrayList<String> getEntriesNames(File zipFile) throws ZipException, IOException {
150 ArrayList<String> entryNames = new ArrayList<String>();
151 Enumeration<?> entries = getEntriesEnumeration(zipFile);
152 while (entries.hasMoreElements()) {
153 ZipEntry entry = ((ZipEntry)entries.nextElement());
154 entryNames.add(new String(getEntryName(entry).getBytes("GB2312"), "8859_1"));
155 }
156 return entryNames;
157 }
158
159 /**
160 * 获得压缩文件内压缩文件对象以取得其属性
161 *
162 * @param zipFile 压缩文件
163 * @return 返回一个压缩文件列表
164 * @throws ZipException 压缩文件格式有误时抛出
165 * @throws IOException IO操作有误时抛出
166 */
167 public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException,
168 IOException {
169 ZipFile zf = new ZipFile(zipFile);
170 return zf.entries();
171
172 }
173
174 /**
175 * 取得压缩文件对象的注释
176 *
177 * @param entry 压缩文件对象
178 * @return 压缩文件对象的注释
179 * @throws UnsupportedEncodingException
180 */
181 public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException {
182 return new String(entry.getComment().getBytes("GB2312"), "8859_1");
183 }
184
185 /**
186 * 取得压缩文件对象的名称
187 *
188 * @param entry 压缩文件对象
189 * @return 压缩文件对象的名称
190 * @throws UnsupportedEncodingException
191 */
192 public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException {
193 return new String(entry.getName().getBytes("GB2312"), "8859_1");
194 }
195
196 /**
197 * 压缩文件
198 *
199 * @param resFile 需要压缩的文件(夹)
200 * @param zipout 压缩的目的文件
201 * @param rootpath 压缩的文件路径
202 * @throws FileNotFoundException 找不到文件时抛出
203 * @throws IOException 当压缩过程出错时抛出
204 */
205 private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath)
206 throws FileNotFoundException, IOException {
207 rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator)
208 + resFile.getName();
209 rootpath = new String(rootpath.getBytes("8859_1"), "GB2312");
210 if (resFile.isDirectory()) {
211 File[] fileList = resFile.listFiles();
212 for (File file : fileList) {
213 zipFile(file, zipout, rootpath);
214 }
215 } else {
216 byte buffer[] = new byte[BUFF_SIZE];
217 BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile),
218 BUFF_SIZE);
219 zipout.putNextEntry(new ZipEntry(rootpath));
220 int realLength;
221 while ((realLength = in.read(buffer)) != -1) {
222 zipout.write(buffer, 0, realLength);
223 }
224 in.close();
225 zipout.flush();
226 zipout.closeEntry();
227 }
228 }
229 }