首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2012-09-24 
java压缩----使用ANT JDK压缩---只压缩选中目录的指定文件夹写在前面的话:使用ANT中的压缩功能在很多文章

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 blocke.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 blocke.printStackTrace();}}

?

热点排行