当前位置:首页 > Java技术 > 正文内容

Java调用Ant API用法

canca15年前 (2011-03-17)Java技术413
Java调用Ant API用法 
用法 API 调用 JAVA 
Ant是Java程序员的一个好的工具,主要可以帮助程序员进行java项目的的管理,包括批量编译、部署、文档生成等工作,其用途远不止如此,ant内置了大量的API进行各种文件系统操作,在各种应用服务器中都被广泛应用于程序和资源的部署。 

Ant功能强大的地方在于,程序员不仅能通过编写Ant的脚本(build.xml)来进行各种文件部署管理操作,还可以通过调用Ant的丰富的API,甚至扩展Ant的API进行编程。 

用于介绍Ant 脚本编写的书比较多,而介绍Java 调用 Ant API的书籍和资料比较少,初学者用户在进行Ant编程时会遇到不少麻烦,笔者也是在项目开发过程中,逐渐摸索并掌握了一些Java调用Ant API的一些方法和技巧,并将常用的案例收集起来呈现给大家(本文使用Ant 1.7.0版本),以供大家参考。当然,Ant的API非常丰富,本文仅做抛砖引玉之用,更强大的功能还需要读者自己在结合Ant的API进行摸索和领悟。 

1.  目录操作: 
1)  创建目录 


Project prj=new Project(); 
Mkdir mkdir=new Mkdir(); 
mkdir.setProject(prj); 
mkdir.setDir(new File("d:tempdir1")); 
mkdir.execute(); 

2)  删除目录 


Project prj=new Project(); 
Delete delete=new Delete(); 
delete.setProject(prj); 
delete.setDir(new File("d:tempdir1")); //可同时将子目录及所有文件删除 
delete.execute(); 

注:对每一个Ant Task,如Mkdir,Delete、Copy、Move、Zip等,都必须设置一个Project对象,可以几个Ant Task共用一个Project对象,但不能有Ant Task不设置Project对象。 

2. 文件拷贝和移动、更名 
1)文件copy 


Project prj=new Project(); 
Copy copy=new Copy(); 
copy.setProject(prj); 
copy.setFile(new File("d:tempf1.txt"); 
copy.setTodir(new File("d:tempdir1")); 
copy.execute(); //将f1.txt文件copy到dir1中 

2)copy文件并同时替换其中的内容, 如将 xml中的 @eosapp_name@ 替换成真正的应用名称 


Project prj=new Project(); 
Copy copy = new Copy(); 
copy.setEncoding("UTF-8"); 
copy.setProject(prj); 
copy.setTodir("d:temp"); 

FileSet fileSet=new FileSet(); 
fileSet.setDir(new File(eosHome+"/base/template.app")); 
fileSet.setIncludes("**/*.xml"); 
copy.addFileset(fileSet); 

FilterSet filter=copy.createFilterSet(); 
filter.addFilter("eosapp_name","app1"); 
copy.execute(); 

2)文件或目录移动 
Move的用法和Copy用法基本一致,Move本身为Copy的子类。 


Project prj=new Project(); 
Copy copy=new Copy(); 
copy.setProject(prj); 
copy.setFile(new File("d:tempf1.txt"); 
copy.setTodir(new File("d:tempdir1")); 
copy.execute(); //将f1.txt文件移动到dir1中 

3)文件改名: 


Project prj=new Project(); 
Copy copy=new Copy(); 
copy.setProject(prj); 
copy.setFile(new File("d:tempf1.txt"); 
copy.setTodir(new File("d:tempf2.txt")); 
copy.execute(); //将f1.txt文件更名为f2.txt中 

4)目录更名: 


Project prj=new Project(); 
Copy copy=new Copy(); 
copy.setProject(prj); 
copy.setFile(new File("d:tempdir1"); 
copy.setTodir(new File("d:tempdir2")); 
copy.execute(); //将dir1目录更名为dir2,相当于将dir1目录下的所有文件移到dir2目录下 

3.使用文件集 FileSet 
使用文件集可以同时将多个满足匹配条件的文件集合进行copy、move和压缩等操作。 


Project prj=new Project(); 
Copy copy=new Copy(); 
copy.setProject(prj); 
copy.setTodir(new File("d:temptodir")); 

FileSet fs=new FileSet(); 
fs.setProject(prj); 
fs.setDir(new File("d:javaprjsrc")); 
fs.setIncludes("**/*.*"); //包含所有文件 
fs.setExcludes("**/CVS,**/*.class"); //排除CVS相关文件,以及.class文件 
copy.addFileset(fs); 

copy.execute(); 

注: FileSet的setIncludes, 和setExcludes方法输入pattern, pattern是一个使用“,”或空格分隔的匹配字符串,其中, “**”代表所有文件或目录,“*.*”代表说有文件, “*.java”代表所有扩展名为java的文件。 

4.目录扫描,查找文件 


DirectoryScanner ds=new DirectoryScanner(); 
ds.setBasedir(new File("d:tempwar")); 
ds.setIncludes(new String[] ); 
ds.scan(); 
if(ds.getIncludedFilesCount()>0) { 
System.out.println("found jsp!"); 
String[] includeFiles=ds.getIncludedFiles(); 
for(String file:includeFiles){ 
System.out.println(file); 



5.文件压缩,打包 
//压缩为zip文件 


Project prj=new Project(); 
Zip zip=new Zip(); 
zip.setProject(prj); 
zip.setDestFile(new File("d:tempsrc.zip")); 
FileSet fileSet=new FileSet(); 
fileSet.setProject(prj); 
fileSet.setDir(new File("d:javaprjprj1src")); 
fileSet.setIncludes("**/*.java"); 
zip.addFileset(fileSet); 
zip.execute(); 

//将class文件打成jar包 
Project prj=new Project(); 
Jar jar=new Jar(); 
jar.setProject(prj); 
jar.setDestFile(new File("d:tempprj1.jar")); 
FileSet fileSet=new FileSet(); 
fileSet.setProject(prj); 
fileSet.setDir(new File("d:javaprjprj1bin")); 
fileSet.setIncludes("**/*.class,**/*.properties"); 
jar.addFileset(fileSet); 
jar.execute(); 

6.文件解压 
1)将压缩文件中的所有文件解压 


Project prj=new Project(); 
Expand expand=new Expand(); 
expand.setProject(prj); 
expand.setSrc(new File("d:tempsrc.zip")); 
expand.setOverwrite(overwrite); 
expand.setDest("d:tempoutsrc"); 
expand.execute(); 

2)将压缩文件中的符合匹配条件的文件解压 


Project prj=new Project(); 
Expand expand=new Expand(); 
expand.setProject(prj); 
expand.setSrc(new File("d:tempsrc.zip")); 
expand.setOverwrite(overwrite); 
expand.setDest("d:tempoutsrc"); 
PatternSet patternset = new PatternSet(); 
patternset.setIncludes("**/*.java"); 
patternset.setProject(prj); 
expand.addPatternset(patternset); 
expand.execute(); 

3)利用Mapper解压文件: 如将 .../lib/*.jar 解压到 .../WEB-INF/lib目录下(去除目录结构) 


Expand expand = new Expand(); 
expand.setProject(prj); 
expand.setSrc(new File(zipFilePath)); 
expand.setDest(new File(webDir+"/WEB-INF/lib")); 

PatternSet pattern = new PatternSet(); 
pattern.setIncludes("lib/*.jar"); 
expand.addPatternset(pattern); 

FileNameMapper mapper=new FlatFileNameMapper(); 
expand.add(mapper); 

/* another way using mapper 
Mapper mapper=expand.createMapper(); 
MapperType type=new MapperType(); 
type.setValue("flatten"); 
mapper.setType(type); 
*/ 
expand.execute(); 

7.读取zip文件 
1) 读取zip文件中的文件和目录 


ZipFile zipfile = new ZipFile(new File(filepath)); 
for (Enumeration entries = zipfile.getEntries(); entries.hasMoreElements();) { 
ZipEntry entry = (ZipEntry) entries.nextElement(); 
if(entry.isDirectory()) 
System.out.println("Directory: "+entry.getName()); 
else 
System.out.println("file: "+entry.getName()); 

zipfile.close(); //ZipFile用完必须close,否则文件被锁定 

2)zip文件扫描,在Zip文件中查找目录或文件 

ZipScanner scan=new ZipScanner(); 
scan.setSrc(new File("d:temptest.zip")); 
scan.setIncludes(new String[] ); //查找目录(一、二级目录); 
scan.scan(); 
String dirs[]=scan.getIncludedDirectories(); 
scan.setIncludes(new String[]); //查找文件 
scan.scan(); 
String files[]=scan.getIncludedFiles();

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/261.html

标签: Java技术
分享给朋友:

“Java调用Ant API用法” 的相关文章

对象序列化与反序列化

    序列化,并不是JAVA独有的。因此,在这里我用比较通俗的话说了。序列化就是把一个对象转换成有规则的二进制流。而反序列化就是把有规则的二进制数据重整成一个对象。其好处不难看见:1.可以把一个对象保存在一个文件里。例如,下载软件。当您关闭了软件,下次再打开...

Java语言的反射机制

    由于项目的需要,在项目中要实现即插即用的方式,也就是说可以动态地加载包,不用设置CLASSPATH路径。当项目发布时,不可能要用户来设置环境变量吧!因此,就要用到JAVA的反射机制了。昨天,我是在研究JAVA的JNI技术。由于没有时间,所以过几天才写JNI。今天...

JSP与Servlet的对应关系

以前在QQzone写下的文章现在贴到这里来了... 最近比较忙啊!现在抽身写一篇文章。是关于JSP与Servlet的对应关系的。希望对大家有所帮助。其实我也是刚刚学的......-------Servlet--------------JSP----------1.ServletContext&nbs...

JAVA获得一个文件夹大小

在JAVA里没有现成的方法获取一个文件夹的大小,那么我们可以用递归的方法,获取文件夹的大小。    import  java.util.*;  import  java.io.*;  class  GetFileSi...

IM技术(1)

    做项目了,NetCL今天开工了,在这些日子里,我会将自己研究的内容写下来。做个记录,以下是我在网上搜到的。关于管理用户状态的解决方案,当然,我都有一个方案。不过对客户端的任务有点重吧,我方法是客户端从服务器端获到一个用户在线状态后,接着就与服务器无关了。好友离线...

过滤网页HTML标记

JAVA过滤HTML中的所有标记。非常好用!! package canca.regex; import java.util.regex.Matcher;import java.util.regex.Pattern; public class HtmlFilter {  priva...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。