首先是對zip文件的解壓:
1.要確定你所存放zip文件的路徑:
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class ZipPath {
public static Map<String,String> zipPaths(){
File file=new File("E:\\stzipdown\\707\\");//因爲這裏我的zip文件是存放在707的子目錄下面的,所以在這裏做了遍歷
String fileName=null;
String filePath=null;
Map<String,String> fileMap=new HashMap<String,String>();//在這裏聲明一個Map,將遍歷得到的zip文件的名字作爲key,zip文件的路徑作爲value。
if(file.isDirectory()){
for(File files:file.listFiles()){
if(files.isDirectory()){
for(File f:files.listFiles()){
if(f.isDirectory()){
for(File ff:f.listFiles()){
fileName=ff.getName();
filePath=ff.getPath();
fileMap.put(fileName, filePath);
}
}else{
fileName=f.getName();
filePath=f.getPath();
fileMap.put(fileName, filePath);
}
}
}else{
fileName=files.getName();
filePath=files.getPath();
fileMap.put(fileName, filePath);
}
}
}
return fileMap;//最後返回一個map給調用者。
}
}
2.解壓zip文件。先調用ZipPath,將map拿到手。
public class Uzip {
public String unZip()throws Exception {
String zipFileName=null;
String ZipFilePath=null;
String outputDirectory=null;
Map<String,String> fileMap=ZipPath.zipPaths();//調用上面zipPaths方法,拿到map。
for(Map.Entry<String, String> entry:fileMap.entrySet()){
zipFileName=entry.getKey();//壓縮文件的名字
ZipFilePath=entry.getValue();//壓縮文件的路徑
File file=new File(ZipFilePath);
String parentFolder=file.getParent().substring(file.getParent().lastIndexOf("\\"));//得到zip文件的父文件夾的名字
outputDirectory="E:\\liming\\707\\"+parentFolder;//這個是存放解壓之後的文件的路徑
org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(ZipFilePath);
try {
Enumeration<?> e = zipFile.getEntries();
org.apache.tools.zip.ZipEntry zipEntry = null;
createDirectory(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement();
System.out.println("解壓:" + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
System.out.println("創建目錄:" + outputDirectory + File.separator + name);
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
if (fileName.indexOf("/") != -1) {
createDirectory(outputDirectory, fileName.substring(0,
fileName.lastIndexOf("/")));
fileName = fileName.substring(
fileName.lastIndexOf("/") + 1,
fileName.length());
}
File f = new File(outputDirectory + File.separator
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
in.close();
out.close();
}
}
System.out.println("解壓 [" + zipFileName + "] 完成!");
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
zipFile.close();
}
}
return outputDirectory;
}
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true) {
fl.mkdir();
} else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
本來準備把後面的解析也寫上去,不過涉及一些公司利益不便上傳,所以就沒寫。隨手製作,如有疏漏,請各位大佬指點指點,感激不盡。