CompressUtils.java
6.54 KB
1
2
3
4
5
6
7
8
9
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
package com.gimi.common.cinema.utils;
import java.io.InputStream;
/**
* Created by wugian on 2017/6/7.
*/
public class CompressUtils {
/**
* 取得压缩包中的 文件列表(文件夹,文件自选)
*
* @param zipFileString 压缩包名字
* @param bContainFolder 是否包括 文件夹
* @param bContainFile 是否包括 文件
* @return
* @throws Exception
*/
public static java.util.List<java.io.File> getFileList(String zipFileString, boolean bContainFolder,
boolean bContainFile) throws Exception {
java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();
java.util.zip.ZipInputStream inZip =
new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
java.util.zip.ZipEntry zipEntry;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
// get the folder name of the widget
szName = szName.substring(0, szName.length() - 1);
java.io.File folder = new java.io.File(szName);
if (bContainFolder) {
fileList.add(folder);
}
} else {
java.io.File file = new java.io.File(szName);
if (bContainFile) {
fileList.add(file);
}
}
}//end of while
inZip.close();
return fileList;
}
/**
* 返回压缩包中的文件InputStream
*
* @param zipFilePath 压缩文件的名字
* @param fileString 解压文件的名字
* @return InputStream
* @throws Exception
*/
public static java.io.InputStream upZip(String zipFilePath, String fileString) throws Exception {
java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFilePath);
java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);
return zipFile.getInputStream(zipEntry);
}
/**
* 解压一个压缩文档 到指定位置
*
* @param input 压缩包的名字
* @param outPathString 指定的路径
* @throws Exception
*/
public static void unZipFolder(InputStream input, String outPathString) throws Exception {
java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(input);
java.util.zip.ZipEntry zipEntry = null;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
// get the folder name of the widget
szName = szName.substring(0, szName.length() - 1);
java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
folder.mkdirs();
} else {
java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
file.createNewFile();
// get the output stream of the file
java.io.FileOutputStream out = new java.io.FileOutputStream(file);
int len;
byte[] buffer = new byte[1024];
// read (len) bytes into buffer
while ((len = inZip.read(buffer)) != -1) {
// write (len) byte from buffer at the position 0
out.write(buffer, 0, len);
out.flush();
}
out.close();
}
}//end of while
inZip.close();
}
/**
* 解压一个压缩文档 到指定位置
*
* @param zipFileString 压缩包的名字
* @param outPathString 指定的路径
* @throws Exception
*/
public static void unZipFolder(String zipFileString, String outPathString) throws Exception {
unZipFolder(new java.io.FileInputStream(zipFileString), outPathString);
}//end of func
/**
* 压缩文件,文件夹
*
* @param srcFilePath 要压缩的文件/文件夹名字
* @param zipFilePath 指定压缩的目的和名字
* @throws Exception
*/
public static void zipFolder(String srcFilePath, String zipFilePath) throws Exception {
//创建Zip包
java.util.zip.ZipOutputStream outZip =
new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFilePath));
//打开要输出的文件
java.io.File file = new java.io.File(srcFilePath);
//压缩
zipFiles(file.getParent() + java.io.File.separator, file.getName(), outZip);
//完成,关闭
outZip.finish();
outZip.close();
}//end of func
/**
* 压缩文件
*
* @param folderPath
* @param filePath
* @param zipOut
* @throws Exception
*/
private static void zipFiles(String folderPath, String filePath,
java.util.zip.ZipOutputStream zipOut) throws Exception {
if (zipOut == null) {
return;
}
java.io.File file = new java.io.File(folderPath + filePath);
//判断是不是文件
if (file.isFile()) {
java.util.zip.ZipEntry zipEntry = new java.util.zip.ZipEntry(filePath);
java.io.FileInputStream inputStream = new java.io.FileInputStream(file);
zipOut.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[4096];
while ((len = inputStream.read(buffer)) != -1) {
zipOut.write(buffer, 0, len);
}
zipOut.closeEntry();
} else {
//文件夹的方式,获取文件夹下的子文件
String fileList[] = file.list();
//如果没有子文件, 则添加进去即可
if (fileList.length <= 0) {
java.util.zip.ZipEntry zipEntry =
new java.util.zip.ZipEntry(filePath + java.io.File.separator);
zipOut.putNextEntry(zipEntry);
zipOut.closeEntry();
}
//如果有子文件, 遍历子文件
for (int i = 0; i < fileList.length; i++) {
zipFiles(folderPath, filePath + java.io.File.separator + fileList[i], zipOut);
}//end of for
}//end of if
}//end of func
}