Coding云

码云的愿心:希望广大程序猿朋友摘掉苦逼的昵称

java

java.util.zip递归压缩带目录结构的文件/文件夹

      如何用java实现压缩文件夹的功能呢?一般有这样几种方法。

  1. 利用jdk自带的java.util.zip包下的工具类实现
  2. 利用第三方比如Apache提供的zip工具包实现

      最近公司项目需要把单词包的数据从服务器down下来,包括单词的json文件数据,以及单词发音的多媒体文件,还有单词的图片文件等等,并且这些数据压缩后需要有清晰的文件目录结构。我用的是第一种方法,利用递归实现的。具体源码如下:


/**
	 * 压缩整个文件夹中的所有文件,生成指定名称的zip压缩包
	 * @param filepath 文件所在目录
	 * @param zippath 压缩后zip文件名称
	 * @param dirFlag zip文件中第一层是否包含一级目录,true包含;false没有
	 * 2015年6月9日
	 */
	public static void zipMultiFile(String filepath ,String zippath, boolean dirFlag) {
	    try {
	        File file = new File(filepath);// 要被压缩的文件夹
	        File zipFile = new File(zippath);
	        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
	        if(file.isDirectory()){
				File[] files = file.listFiles();
				for(File fileSec:files){
					if(dirFlag){
						recursionZip(zipOut, fileSec, file.getName() + File.separator);
					}else{
						recursionZip(zipOut, fileSec, "");
					}
				}
	        }
	        zipOut.close();
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	
	private static void recursionZip(ZipOutputStream zipOut, File file, String baseDir) throws Exception{
		if(file.isDirectory()){
			File[] files = file.listFiles();
			for(File fileSec:files){
				recursionZip(zipOut, fileSec, baseDir + file.getName() + File.separator);
			}
		}else{
			byte[] buf = new byte[1024];
			InputStream input = new FileInputStream(file);
    		zipOut.putNextEntry(new ZipEntry(baseDir + file.getName()));
    		int len;
    		while((len = input.read(buf)) != -1){
    			zipOut.write(buf, 0, len);
    		}
    		input.close();
		}
	}

大家可以写个test类测试一下,有问题可以留言,我会尽快回复留言与大伙沟通的。

(转载本站原创文章请注明作者与出处Coding云--codingyun.com)

这篇文章帮我解决问题了,我忍不住的想点赞!!!
同时也想小小的打赏一笔表示感谢。

已经有155位老爷赞赏了本文

打赏方式一:
打开支付宝,使用“扫一扫”打赏。
支付宝打赏
打赏方式二:
打开微信,使用“扫一扫”打赏。
微信打赏