「サーブレットでテキストファイルに書き込みを行う」でもご紹介したように、FileWriter/BufferedWriterクラスを用いることで、JSP&サーブレットからテキストファイルへの書き込みを行うことができます。ここでは、タブ区切りテキストをJSPスクリプトから読み込み、HTMLテーブルに展開する方法をご紹介することにしましょう。
テキストファイルの読み込みにはFileReader/BufferedReaderクラスを用います。
<%@ page contentType="text/html;charset=UTF-8"
import="java.io.*,java.util.*" %>
<table border="1">
<tr>
<th>アクセス日時</th><th>URL</th><th>ユーザエージェント</th>
</tr>
<%
BufferedReader objBr=new BufferedReader(
new FileReader(application.getRealPath("access.log")),10);
String line = "";
while((line = objBr.readLine()) != null){
StringTokenizer objTkn=new StringTokenizer(line,"\t");
out.println("<tr>");
while(objTkn.hasMoreTokens()){
out.println("<td nowrap>" + objTkn.nextToken() + "</td>");
}
out.println("</tr>");
}
objBr.close();
%>
</table>
訂正のお知らせ(2009年3月31日)
読者から上記のサンプルコード、「while (objBr.ready())」について貴重なご指摘をいただき、コードを差し替えさせていただきました。
内容について正確を期せずに混乱を招いた点、読者の皆様におわび申し上げます。
より効率的な処理を実現するためにも、一般的にはバッファリング機能を実装するBufferedReaderクラスを介するのが通例です。確保するバッファのサイズは、BufferedWriterのコンストラクタ第2引数で自由に変更することが可能です。
なお、ここではもう1つ重要なポイントがあります。タブ区切りテキストのような定型的なフォーマットを解析する場合には、StringTokenizerクラスで区切り文字(ここではタブ文字)ごとに読み取った文字列を分解、順に読み取ることができます。J2SE1.4以降を使用している場合には、StringTokenizerクラスの代わりに、String#splitメソッドを使用してもよいでしょう。
String[] aryTkn=objBr.readLine().split("\t");
out.println("<tr>");
for(int i=0;i<aryTkn.length;i++){
out.println("<td nowrap>" + objTkn.nextToken() + "</td>");
}
out.println("</tr>");
Copyright © ITmedia, Inc. All Rights Reserved.