java压缩----使用ANT JDK压缩---只压缩选中目录的指定文件夹

写在前面的话:使用ANT中的压缩功能在很多文章中都有,但是只能压缩指定目录的全部文件或者文件夹,在项目中,经常有这样的需求:只压缩指定目录的部分文件夹, 用过ant.xml 的人都很容易想到 fileset 的子属性: exclude 和 include , 看了一下ant的源码 , 其对应的类就是各种的selector , 所以简单尝使了两种selector 实现了上面所说的功能,具体代码如下.

 

可能大家会问, 为什么不把要压缩的文件拷贝到一个文件夹, 再压缩, 是因为我很怵文件的读写, 总感觉文件读写万一处理不好效率会有很大的影响,  把工作交给ANT比较放心.

 

其实, ANT的设计相当优雅,有时间真得应该拜读一下源码.

 

 

第一种:只能选择指定目录的一个文件夹.

public static void main(String[] args) {
		try {
			Project prj = new Project();
			Zip zip = new Zip();
			zip.setProject(prj);
			zip.setDestFile(new File("d:\\a.zip"));			
			String src1 = "D:\\evidence\\20120806\\";
			File src = new File(src1);
			FileSet fileSet = new FileSet();
			fileSet.setProject(prj);
			if (src.isFile()) {
				fileSet.setFile(src);
			} else {
				fileSet.setDir(src);
			}
			/**
			 * <pre>
			 * 目标:打包时只选指定目录的文件夹A和文件夹B,对于下面的程序来讲,"79个..."和"过年写的.."就是指两个文件夹.
			 * 方法:为fileSet添加两个FilenameSelector
			 * 实现效果:只会把第一个加入的FilenameSelector打包,第二个不会.
			 * 总结:打包目录全部的文件夹,只需在文件名后面加"/**\/*"
			 * </pre>
			 */
			FilenameSelector a = new FilenameSelector();
			a.setName("79个不可不知的生活潜规则_2012080617154683/**/*");
			FilenameSelector b = new FilenameSelector();
			b.setName("过年写的几篇家乡小吃片段_2012080617154651/**/*");
			fileSet.addFilename(b);
			fileSet.addFilename(a);
			zip.addFileset(fileSet);
			zip.execute();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 第二种:可以选择指定目录的N个子文件夹.

public static void main(String[] args) {
		try {
			Project prj = new Project();
			Zip zip = new Zip();
			zip.setProject(prj);
			zip.setDestFile(new File("d:\\a.zip"));			
			String src1 = "D:\\evidence\\20120806\\";
			File src = new File(src1);
			FileSet fileSet = new FileSet();
			fileSet.setProject(prj);
			if (src.isFile()) {
				fileSet.setFile(src);
			} else {
				fileSet.setDir(src);
			}
			/**
			 * <pre>
			 * 目标:打包时只选指定目录的文件夹A和文件夹B,对于下面的程序来讲,"79个..."和"过年写的.."就是指两个文件夹.
			 * 方法:为fileSet添加OrSelector,在OrSelector中添加两个FilenameSelector
			 * 实现效果:实现目标
			 * </pre>
			 */
			
			FilenameSelector a = new FilenameSelector();
			a.setName("79个不可不知的生活潜规则_2012080617154683/**/*");
			
			FilenameSelector b = new FilenameSelector();
			b.setName("过年写的几篇家乡小吃片段_2012080617154651/**/*");
			
			OrSelector or = new OrSelector(); 
			or.addFilename(a);
		    or.addFilename(b);
			
			fileSet.addOr(or);
			zip.addFileset(fileSet);
			zip.execute();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

你可能感兴趣的:(java压缩)