久しぶりに csv4j

CSVを読み込んで処理することなど、原始的で近年携わったプロジェクトではなかった。
csv4j なるものを久々に使って思い出した。
  http://csv4j.sourceforge.net/

CSVLineProcessor がとても便利だ。CSVLineProcessorを使うのに注意すべきは、
continueProcessing() 実装で、行の処理、ヘッダの処理=processHeaderLine()
データ行の処理=processDataLine()が実行される前に、
continueProcessing() が呼び出される。
したがって、常に false を返すと何もしてくれない。
この continueProcessing() が鬱陶しいと思っていたが、実はこれが威力を発揮ケースがある。

CSVFileProcessor fp = new CSVFileProcessor();
fp.processFile("sample.csv",new CSVLineProcessor(){
   boolean b=true;
   @Override
   public void processHeaderLine(int linenumber,List<String> fieldNames){
      for(final String headerName : fieldNames){
         System.out.println("headerName=["+headerName+"]");
      }
   }
   @Override
   public void processDataLine(int linenumber,List<String> fieldValues){
      System.out.println("linenumber = "+linenumber);
      for(String fieldValue : fieldValues){
         System.out.println("fieldValue=["+fieldValue+"]");
      }
      // fieldValues のある条件で、次の行から実行しないようにする
      if (...){
         b = false;
      }

   }
   @Override
   public boolean continueProcessing(){
      return b;
   }

});