2009年11月05日

【Commons】FileUtilsで1行のコードでファイル書き込み

この前、読み込みの方を書いたので、なんとなく書き込みも。

Apache Commonsがファイルからテキストを出力するコードは、僅か1行に過ぎない。では、書き込みプロセスを見てみよう!


// JRE 1.6.0_07
// Commons IO 1.4
// org.apache.commons.io.FileUtils.writeStringToFile
// org.apache.commons.io.FileUtils.writeByteArrayToFile
// org.apache.commons.io.FileUtils.writeLines
// FileUtilsを使って1行のコードでファイル出力を行う


// writeStringToFileを使うと、文字列を手軽にファイルに書き込めます
// 見た限りでは追記モードはなさそう
String strData = "この文字をファイルに書き込む";
FileUtils.writeStringToFile( new File("out.txt"), strData, "utf-8" );

// byte[]形式で書くメソッドもあります
// 画像等、文字列以外を出力したかったり、
// HTTP通信で取ってきたものをそのまま書き込みたい時なんかにどうぞ
byte[] byteArray = strData.getBytes();
FileUtils.writeByteArrayToFile( new File("out.txt"), byteArray );

// List形式でも書き込めます
// 要素ごとに改行されて出力されます
List<String> strList = new ArrayList<String>();
strList.add( "ひとーつ" );
strList.add( "ふたーつ" );
FileUtils.writeLines( new File("out.txt"), "utf-8", strList );
// => ひとーつ
// => ふたーつ

// writeLinesは4つ目の引数がセパレータになっているので、
// 例えば\tを指定したりすれば、タブ区切りで書き込めます
FileUtils.writeLines( new File("out.txt"), "utf-8", strList, "\t" );
// => ひとーつ ふたーつ

// ちなみにwriteLinesのデフォルトの改行コードの取り方が割と面白いです
// IOUtilsの中にいるのですが、こんな感じの記述になっています
// printlnでWriterに改行コードを出力させて、
// それを取得すれば、それはOSの改行コード、みたいな
StringWriter buf = new StringWriter(4);
PrintWriter out = new PrintWriter(buf);
out.println();
String lineSeparator = buf.toString();