home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2006/11/02/JavaでPropertyファイルを好き勝手な位置から読み込ませるには

日記/2006/11/02/JavaでPropertyファイルを好き勝手な位置から読み込ませるには

日記 / 2006 / 11 / 02 / JavaでPropertyファイルを好き勝手な位置から読み込ませるには
id: 295 所有者: msakamoto-sf    作成日: 2006-11-02 10:37:17
カテゴリ: Java 

前々から気になってて仕方の無かった疑問の一つ。
Propertyファイル・・・広く言えば外部リソースという言い方になるらしいんだけど。
例えばクラスパス直下の*.propertiesファイルであれば、ResourceBundleで一発で読み出せる。ResourceBundleは基本的にローカライズリソースの読み込みに使われるので、まあ、便利。
ただ、ResourceBundleはプロパティファイルの位置を指定できない。クラスパスツリーの中に組み込まれた形でないと利用できない(元々リソースを表現するクラスファイルを読み込むものらしいので、当然と言えば当然)。
というわけで、好き勝手な位置のiniファイルやpropertiesファイルをどうやって読み込ませようか、となるわけだけど、Log4jの初期化部分とか眺めて大雑把に3種類くらいありそう。

1. ClassLoaderのgetResource()をそのまま利用する。→これだとやっぱりクラスパスツリーの内部にしかおけない・・・。
2. URLクラスの形で指定し、Properties#load()に、URL#openStream()を指定する。
3. 普通にjava.io.FileInputStream()を作成し、Properties#load()に指定する。

1. はクラスパスツリー限定になるので不可。なんだってこう、Javaのリソースの取り扱いってクラスパス主義なのかね。Perl/Ruby/PHP/Pythonの方が融通が利く。そういうところは。
2. については、結局のところファイル指定の部分がURL経由か、手動でFileInputStreamを作るか、ってところだけで、結局は同じ。そうすると、URL経由だと

file:///c:/hogehoge/bohebohe/hoge.properties

みたいにやたら冗長に指定することになる。めんどくせー。

・・・まあ、DOSから動かすのであれば

file:///%CD%/../../hoge.properties

とか指定できるからあながち困るわけでも無いんだけど。

結局のところ、URL経由か直かの違いだけで、クラスパスツリーの外に設定ファイルを置こうとしたらProperties#load()を使用するほか無いのかもしれない。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-04-05 10:38:44
md5:ac0528798ac326f89c174aca937d154f
sha1:be4a45e0ef65b05119960a13ddbf5fd89de4d5d4
コメント
コメントを投稿するにはログインして下さい。