- PR -

クラスパス上にあるXMLファイルの読み込み方

1
投稿者投稿内容
みじんこ
会議室デビュー日: 2005/01/08
投稿数: 6
投稿日時: 2006-02-22 01:40
あるプロパティファイル構造が複雑化してきたためXML形式で再定義を行いました。プロパティファイルの場合はResourceBundleを使っていたので簡単にアクセスできていたのですが、XMLファイルの場合Fileクラスなどを使用してファイルのパスを指定しなければなりません(と考えています)。

以下のような方法を考えたのですがシンプルな設計に程遠いため納得していません。この様な場合なにか一般的な方法があるのでしょうか?ご存知の方がいらっしゃれば教えてください。

スマートでないやり方:
 @システム変数からクラスパスを取得(java.class.path)
 AStringTokenizerで文字「;」で分割
 B上記で取得したファイルパスとXMLファイル名を連結(拡張子*.jarなどは排除)
 Cファイルパスを片っ端から連結して該当ファイルを探す

ちなみにLog4jではlog4j.propertiesとlog4j.xmlで切り替えています。ソースをいろいろ探索してみたんですが該当の処理をうまく見つけられませんでした。

以上よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-22 04:14
ClassLoader#getResourceAsStream() でクラスパスに含まれるリソースを取得できます。
で、DocumentBuilder#parse() が InputStream を受け付けます。
というわけで、こんな感じ↓で DOM オブジェクトを取得できるかと思います。
Document doc = documentBuilder.parse(this.getClass().getResourceAsStream(location));
みじんこ
会議室デビュー日: 2005/01/08
投稿数: 6
投稿日時: 2006-02-22 07:08
無事動作しました。XMLはこれまであまり利用していなかったのですが大変勉強になりました。ありがとうございました。

(ベテランの方に見せるのは少し恥ずかしいのですが)今後このスレッドみる誰かのために注意点を書いておきます。ロケーションの指定方法ですこしはまりました。
 (誤)String location = "sample.xml";
 (正)String location = "/sample.xml";
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-22 08:22
興味があれば ResourceBundle のソースを見てみると面白いかもしれません。
getResource() を使って読み込みます、とドキュメントに書いてありますね。
http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html
1

スキルアップ/キャリアアップ(JOB@IT)