Many are having a need to write their own ant task, just like I had. I wanted to search some strings in a set of files and write the result into some destination files. Just listing the steps to achieve the same.
1. I work with Eclipse. Created a Java project and created the below build.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Search" basedir="." default="jar">
<target name="clean" description="Delete all generated files">
<delete dir="classes"/>
<delete file="search.jar"/>
</target>
<target name="compile" description="Compiles the Task">
<javac srcdir="src" destdir="classes"/>
</target>
<target name="jar" description="JARs the Task" depends="compile" >
<jar destfile="search.jar" basedir="classes"/>
</target>
</project>
2. Wrote a Java code which extends Task class. I wanted to have sourceFile, destFile and searchString as parameters and hence having three instance variables as sourceFileString, destFileString and searchString. On execute() method functionality has been implemented.
import org.apache.tools.ant.Task;
import java.io.*;
public class SearchTask extends Task {
private String sourceFileString = null;
private String destFileString = null;
private String searchString = null;
public void setSourceFile(String sourceFile)
{
this.sourceFileString = sourceFile;
System.out.println(" Source file set to "+sourceFile);
}
public void setDestFile(String destFile)
{
this.destFileString = destFile;
System.out.println(" dest file set to "+destFile);
}
public void setSearchString(String searchString)
{
this.searchString = searchString;
System.out.println(" search string set to "+searchString);
}
public void execute()
{
System.out.println(" Execute called ");
File sourceFile = new File(sourceFileString);
if(sourceFile.isDirectory())
{
File[] array = sourceFile.listFiles();
for(int i=0;i<array.length;i++)
{
File file = array[i];
search(file);
}
}
else
{
search(sourceFile);
}
}
private void search(File sourceFile)
{
System.out.println(" searching starts ");
BufferedReader reader = null;
BufferedWriter writer = null;
try
{
reader = new BufferedReader(new FileReader(sourceFile));
writer = new BufferedWriter(new FileWriter(destFileString));
String line = null;
while( (line = reader.readLine()) != null)
{
System.out.println(" line =="+line+" searchString "+searchString);
if(line.indexOf(searchString) > -1)
{
writer.write(line);
writer.newLine();
}
}
}
catch(Exception ee)
{
ee.printStackTrace();
}
finally
{
try
{
writer.close();
reader.close();
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
}
}
3. Executed jar task and created search.jar. Then added the below task.
<target name="search" depends="jar" description="searching the file">
<taskdef name="search" classname="SearchTask" classpath="search.jar"/>
<search sourceFile="e:\\searchFile.txt" destFile="e:\\searchresult.txt" searchString="cool" >
</search>
</target>
No comments:
Post a Comment