Groovyでファイルを行単位で処理する
javaだと
ソース
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileSample { public static void main(String[] args) { BufferedReader bufferFile = null; try { bufferFile = new BufferedReader( new FileReader(".\\testdata\\readLine.txt")); while(true){ String line = null; line = bufferFile.readLine(); if(line == null){ break; } System.out.println("line:" + line); } } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } finally { if(bufferFile != null) { try { bufferFile.close(); } catch(IOException e) { e.printStackTrace(); } } } } }
メンドクサイ
結果
[D:\workspace\groovy_SandBox]java FileSample line:readLine line: line:public String readLine() line: throws IOException line: line: テキスト行を読み込みます。1 行の終端は、改行 ('\n') か、復帰 ('\r')、または復行とそれに続く改行のいずれかで認識されます。 line: line: 戻り値: line: 行の内容を含む文字列、ただし行の終端文字は含めない。ストリームの終わりに達している場合は null line: 例外: line: IOException - 入出力エラーが発生した場合 line:
Groovy
ソース
f = new File(".\\testdata\\readLine.txt") f.eachLine{line-> println "line: ${line}" }
カンタン
結果
[D:\workspace\groovy_SandBox]groovy Q151_ファイルを行単位で処理する.groovy line: readLine line: line: public String readLine() line: throws IOException line: line: テキスト行を読み込みます。1 行の終端は、改行 ('\n') か、復帰 ('\r')、または復行とそれに続く改行のいずれかで認識されます。 line: line: 戻り値: line: 行の内容を含む文字列、ただし行の終端文字は含めない。ストリームの終わりに達している場合は null line: 例外: line: IOException - 入出力エラーが発生した場合 line:
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
Groovyイン・アクション
posted with amazlet
問題自体は以下の書籍のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。
Rubyレシピブック 第2版 268の技
posted with amazlet
Groovyイン・アクションを読むならあった方が便利かな。