第9回は、前回の『クラスライブラリを攻略「ユーティリティ編」』に引き続き、ファイルシステムやテキストファイルの入出力を制御するjava.ioパッケージ、バイナリ画像を操作するjava.awtパッケージを扱うことにします。
データストアというと、とかくリレーショナルデータベース(以下RDB)をイメージしがちです。確かにRDBは大量のデータを高速に、かつさまざまな角度から処理できるという意味で有用なツールですが、必ずしも常にRDBにこだわる必要はありません。例えば、サーバ上に蓄積されたファイルそのものを扱いたいという場合には、あえてRDBに格納するよりも、標準的なファイルシステムを利用した方が、圧倒的にシンプルなロジックで扱うことができるからです。
ファイルシステムは、ファイルを扱うために最適化された、そして、われわれが最も使い慣れたディレクトリ(階層)構造を提供する、代表的なデータストアの1つなのです。
本稿では、java.io.Fileクラスを利用して、サーバ上のファイルシステムにダイレクトにアクセスするための方法を紹介します。
リスト1は、Fileクラスを利用したプログラミング例です。単に指定されたフォルダ上のファイルをリスト表示するだけですが、リストにダウンロード用のリンクを設置したり、アップロードのしくみを追加したりすることで、Webインターフェイスのファイルサーバを構築することも可能でしょう。
<%@ page contentType="text/html; charset=Shift_JIS" import="java.io.*,java.util.*" %> <table border="1"> <tr> <th>ファイル名</th><th>サイズ(キロバイト)</th><th>最終更新日</th> </tr> <% File objFld=new File(application.getRealPath(".")); File[] aryFls=objFld.listFiles(); for(int i=0;i<aryFls.length;i++){ %> <tr> <td><%=aryFls[i].getName()%></td> <td align="right"> <% if(aryFls[i].isDirectory()){ out.print("<br />"); }else{ out.print(Math.ceil(aryFls[i].length()/1024+1) + "KB"); } %> </td> <td><%=(new Date(aryFls[i].lastModified())).toString() %></td> </tr> <% } %> </table>
リスト1の実行結果は以下のとおりです。
リスト1の内容を説明しましょう。Fileクラスは、その名とは裏腹に、ファイルのみならずディレクトリ(フォルダ)をも表現するという点に注意してください。
File objFld=new File(application.getRealPath("."));
ここで生成しているFileオブジェクトは、現在の「ディレクトリ(フォルダ)」を表します。listFilesメソッドは現在のディレクトリ配下に存在するサブディレクトリ、ファイルをFileオブジェクト配列として取得します。あとは、配列の内容を出力するいつも手順で、forループを要素数分だけ繰り返します。
個々のFileオブジェクトを介することで、ファイル名(getName)、サイズ(length)、最終更新日(lastModified)などの情報を取得することができます。また、本サンプルではFileオブジェクトの内容がディレクトリであるかどうか(isDirectory)を確認し、ディレクトリである場合にはサイズ欄をブランクにしている点に注意してください。
Fileクラスはファイル・ディレクトリの属性、および、ファイル・ディレクトリそのものを操作するための手段を提供します。以下では、本サンプルで扱うことのできなかった主なメソッドをリストアップしておくことにしましょう。
メソッド | 概要 |
---|---|
delete() | ディレクトリ・ファイルを削除 |
exists() | ディレクトリ・ファイルが存在している場合はtrue |
getParent() | 親ディレクトリのパスを返す |
getParentFile() | 親ディレクトリを表すFileオブジェクトを返す |
getPath() | ディレクトリ・ファイルの絶対パスを返す |
isFile() | Fileオブジェクトがファイルの場合にtrueを返す |
isHidden() | ディレクトリ・ファイルが隠し属性を持つ場合にtrueを返す |
mkdir() | Fileオブジェクトが示すパスに新規ディレクトリを作成 |
renameTo(objFle) | 現在のファイル名をFileオブジェクトobjFleが示す名前に変更 |
Fileクラスは、ファイルシステム上のディレクトリ(フォルダ)、ファイルにアクセスするための手段を提供します。ファイル名・サイズをはじめとしたファイル属性のほか、新規作成・名称変更・削除など、Fileオブジェクトを介することで、ファイルそのものを操作することが可能になります。
Copyright © ITmedia, Inc. All Rights Reserved.