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());

	        }
	    }
}		
本来准备把后面的解析也写上去,不过涉及一些公司利益不便上传,所以就没写。随手制作,如有疏漏,请各位大佬指点指点,感激不尽。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值