And maybe there are some existing tasks you could use, like 
http://antcount.sourceforge.net/  ;-)

Jan 

>-----Ursprüngliche Nachricht-----
>Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
>Gesendet: Freitag, 12. Mai 2006 07:28
>An: [email protected]
>Betreff: AW: Counting lines in a file
>
>>import java.io.BufferedReader;
>>import java.io.File;
>>import java.io.FileReader;
>>import java.util.ArrayList;
>>
>>import org.apache.tools.ant.BuildException;
>>import org.apache.tools.ant.Task;
>>
>>public class LineCounter extends Task
>>{
>>      public String filename;
>>      public void Execute() throws BuildException
>
>as mentioned earlier it must be   execute()
>
>
>>      {
>>              LineCounter lc = new LineCounter();
>
>You dont need that. You are inside LineCounter - why 
>instantiating another object?
>
>
>
>>              log("about to call countlines");
>>              log(filename+ " contains " +
>lc.countLines(this.filename) +" lines.");
>
>therefore just   .... + countLines(filename) + ....
>
>
>>      }
>>      public void setFilename(String filename)
>
>You could use   setFilename(java.io.File file)  directly.
>Ant will convert it.
>
>
>>      {
>>              System.out.println("we are about to parse ->"+filename);
>
>Better use log()
>
>
>>              this.filename= filename;
>>      }
>>      public int countLines(String file)
>>      {
>>              ArrayList integlist = new ArrayList();
>
>Why holding the content if you just want to count the lines?
>Think of huge files ....
>
>
>>              try 
>>              {
>>                      BufferedReader br = new
>>BufferedReader(new FileReader(new File(file)));
>>                      String line;
>>                      while((line = br.readLine())!=null)
>>                      {
>>                              integlist.add(line);
>>                      }
>>                      System.out.println(integlist.size());
>
>Better use log()
>
>
>>                      br.close();
>>              }
>>              catch (Exception e) 
>>              {
>>                      e.printStackTrace();
>>                      System.exit(-1);
>
>
>just do a 
>    throw new BuildException(e)
>calling a System.exit is not a very scalable approach. Think 
>of a buildfile integrated into a server. I dont know if 
>CruiseControl would start a new VM for each build ... If not 
>you would stop the build loop of the continous integration server.
>
>
>
>
>>              }
>>              return integlist.size();
>>      }
>>}
>
>Just returing? No access from the buildfile?
>* add another attribute 'property'
>    private String propertyName;
>    public void setProperty(String p) { propertyName = p; }
>* enhance the execute() method for setting the the value
>    getProject().setNewProperty(propertyName,
>Integer.valueOf(countLines(filename)));
>* refactor using local fields for not calling countLines(filename)
>multiple times for each file.
>
>
>Jan
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to