使用ant自定义任务,可以非常简便的扩展ant, 其实与扩展jsp标签的方法是类似的.
1. 新建一个项目,并导入ant的 jar包
2. 写一个java类,继承org.apache.tools.ant.Task类,并覆盖execute方法
package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.ListIterator; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * 该类主要用于 对文件中的行进行排序, 并将排序 后的行 写入 一个新 文件 中 * @author Administrator */ public class FileSort extends Task { private File file; //源文件 private File tofile; //目标 文件 @Override public void execute() throws BuildException { try { BufferedReader fromFile = new BufferedReader(new FileReader(file)); BufferedWriter toFile = new BufferedWriter(new FileWriter(tofile)); //读取文件 String line = fromFile.readLine(); List<String> fileString = new ArrayList<String>(); while(line!=null) { fileString.add(line); line = fromFile.readLine(); } //排序 Collections.sort(fileString); //排序后写入新文件 for(ListIterator<String> li= fileString.listIterator(); li.hasNext();) { String str = li.next(); toFile.write(str); toFile.newLine(); } fromFile.close(); toFile.close(); } catch (Exception e) { e.printStackTrace(); } super.execute(); } //提供 2个属性file和tofile的set及get方法..省略
3. 在项目根目录下,创建build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="myantExtend" default="sortFile" basedir="."> <target name="sortFile"> <!--这个classpath实际 上是针对build.xml这个 文件所处的位置, classpath指向的就是FileSort.class文件对应的目录--> <taskdef name="myFileSortextend" classname="com.FileSort" classpath="bin"> </taskdef> <!--使用刚刚定义的任务--> <myFileSortextend file="input.txt" tofile="output.txt" > </myFileSortextend> </target> </project>
4. 将input.txt中写入要排序的字符, 然后运行该build,将会得到排序后的output.txt文件,至此,自定义一个ant任务已经完成了.
目录结构如下图: