プログラマーの“宿命”? ファイル操作に関する常識:プログラマーの常識をJavaで身につける(7)(3/4 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は「ファイル操作」について。OSやアプリケーションなどのさまざまなプログラムでよく行われ、とても身近な存在であるファイル操作の仕方を一から解説します
ここからは、エクスプローラのメニューで見た機能の中から2つの機能を取り上げます。
ちなみに、ここで紹介する内容はエクスプローラが提供している機能に相当するものをJava APIを用いて実現するものです。完全に一致した機能ではないという点に留意してください。
ディレクトリ・ファイル一覧を取得するプログラム
エクスプローラでは、あるディレクトリに含まれるディレクトリおよびファイルの一覧を表示する機能があります。これと同様の機能をJava APIを用いて実現すると、どのようになるのか見てみましょう。
ディレクトリ内のディレクトリおよびファイルの一覧取得やファイルの詳細情報の取得には、java.io.Fileクラスを利用します。
- java.io.File#listFiles:ディレクトリおよびファイルの一覧を取得するメソッド
- java.io.File#isDirectory:ディレクトリかどうかを判定するメソッド
- java.io.File#lastModified:最終更新日時を取得するメソッド
- java.io.File#getName:名前を取得するメソッド
加えて、java.io.FileクラスのメソッドのうちgetAbsolutePathメソッドおよびgetCanonicalPathメソッドの動きを確認するための処理を記述しました。絶対パス名や正規パス名は、java.io.Fileの利用においてよくつまずきやすいところだからです。
このように、複数回のJava API呼び出しおよび組み合わせによって、目的の機能が実現できます。
さらに、入出力処理を実装する場合には、メソッドのパラメータチェックの処理が増える傾向にあります。このサンプルでは、最低限のパラメータチェックを実装しているのにすぎませんが、それでもソースコードのかなりの行数を占めていることを確認してください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果の例を示します。
実行結果
処理対象ディレクトリ[C:\Documents and Settings\iga]。
絶対パス名[C:\Documents and Settings\iga]
正規パス名[C:\Documents and Settings\iga]
2007/04/12 10:50:53 <DIR> .SunDownloadManager
2007/02/14 17:56:36 <DIR> Application Data
2007/08/29 20:45:22 <DIR> Cookies
2007/05/22 08:03:59 dlmgr_.pro
2006/12/22 20:55:20 <DIR> Favorites
2006/08/01 14:57:16 <DIR> Local Settings
2007/08/11 18:07:18 <DIR> My Documents
2007/06/25 10:34:45 <DIR> NetHood
2007/08/30 09:55:59 NTUSER.DAT
2007/08/30 18:30:03 ntuser.dat.LOG
2007/08/30 06:59:52 ntuser.ini
2006/08/01 14:57:16 <DIR> PrintHood
2007/08/30 18:22:43 <DIR> Recent
2007/01/01 08:48:03 <DIR> SendTo
2007/01/05 07:04:03 <DIR> ssh
2006/08/01 15:03:04 <DIR> Templates
2006/12/22 21:06:01 <DIR> UserData
2006/12/23 23:25:22 <DIR> WINDOWS
2007/08/08 22:15:39 <DIR> workspace
2006/12/24 15:19:46 <DIR> スタート メニュー
2007/08/30 09:24:14 <DIR> デスクトップ
この例では、最終更新日時、ディレクトリかファイルか、ディレクトリ・ファイル名を一覧表示するようになっています。
JUnitでテストをする場合
また参考までに、このクラスをテストするためのJUnitソースコードを示します。ここでは、主な異常系のみ、しかもなるべく簡潔に記述してある点に注意してください。現実的なJUnitコードはこれよりずっと多くのテストコードによって実現されるものなのです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
正規パス名を調べるためにディレクトリ名に親ディレクトリを含めるように変更
ここで、正規パス名とはどういったものであるのかということを確認するために、ディレクトリ名に親ディレクトリを含めるように変更して動作させてみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この実行結果から、絶対パス名はディレクトリ名に親ディレクトリ表記が含まれたままですが、正規パス名は親ディレクトリ表記を解消したディレクトリへと変わっていることが分かります(正規パス名の内部的処理については、OSによって動作が異なる場合があります)。
実行結果
処理対象ディレクトリ[C:\Documents and Settings\iga\..]。
絶対パス名[C:\Documents and Settings\iga\..]
正規パス名[C:\Documents and Settings]
2006/12/19 10:50:29 <DIR> Administrator
2006/12/22 20:55:06 <DIR> All Users
……以下省略……
次ページでは、ファイルコピーの実装例を見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.