java 實現對某個文件夾下的所有的 zip文件進行解壓

首先是對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());

	        }
	    }
}		
本來準備把後面的解析也寫上去,不過涉及一些公司利益不便上傳,所以就沒寫。隨手製作,如有疏漏,請各位大佬指點指點,感激不盡。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章