- - PR -
プロパティファイルから、String配列の値を取り込むには?
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-16 16:26
いつもお世話になっております。
ハナと申します。 ResourceBundleに関してお聞きしたい事があります。 以下のように、「test.properties」というファイルを用意し、 「test1」というkeyから、数個のvalue値をString配列で取得したいのですが、 ClassCastExceptionが発生します。 「.propertiesファイル」からは、 getString()を用いてStringの値を取り込む事しか出来ず、 getStringArray()を用いてStringの配列を取り込む事は出来ないのでしょうか? もし出来ないとするなら、1つのkeyで複数のvalue値を取り込み、 しかも、propertiesファイルのように、外部に値を持ちたい場合、 皆様はどういう方法を用いているのでしょうか? (ご自分で実装されるのでしょうか?) ご教授願えたらと思います。 以上、宜しくお願い致します。 --- test.properties ---- test1=A,B,C ------------------------ --- test.classの一部 -------------------------------------- ResourceBundle resource = ResourceBundle.getBundle("test"); String[] str = resource.getStringArray("test1"); ----------------------------------------------------------- | ||||||||||||||||
|
投稿日時: 2004-04-16 16:53
なんだか久々の書き込み
ハナさん StringTokenizerを調べてみてください | ||||||||||||||||
|
投稿日時: 2004-04-16 16:53
連打してしまいました(汗)
##編集## [ メッセージ編集済み 編集者: ニシトミ 編集日時 2004-04-16 16:54 ] | ||||||||||||||||
|
投稿日時: 2004-04-16 16:58
Commons Collections の
org.apache.commons.collections.ExtendedProperties#getStringArray() を使えばカンマ区切りで配列になりますよ | ||||||||||||||||
|
投稿日時: 2004-04-16 17:24
JDK1.4からならStringクラスのsplitメソッドで
getString().split(",")とすれば、 そうでないならStringのsplitぐらい簡単に作れるから 同様にgetString()してからsplit掛けたらどうですか? | ||||||||||||||||
|
投稿日時: 2004-04-17 00:04
すごく気になったので、少し調べてみました。 theserverside.com こういう風に使うみたいです srcも見てみたんですが
な感じになってました これってなんでpublicなのでしょうか? へんな事言ってたらすみません! [ メッセージ編集済み 編集者: ニシトミ 編集日時 2004-04-17 00:12 ] | ||||||||||||||||
|
投稿日時: 2004-04-17 11:55
ResourceBundle#getXXXX()を呼び出すと、めぐりめぐって、ResourceBundle#handleGetObject()が呼ばれます。このメソッドは、各々の具象クラスで実装されます。
j2sdk 1.5βの場合、ResourceBundle#getResource()の呼び出しで、PropertyResourceBundleのインスタンスが返されます。 そこで、、PropertyResourceBundle#handleGetObject()の実装を見ると、
となっており、Propertiesオブジェクトを介して作成されたHashMapから値を読みこんでいることが分かります。 では、Properties#load()はどうなっているかといえば、
文字列のキーに対して、文字列の値を入れています。 したがって、ResourceBundleの現在の実装では、文字列しか取り出すことができません。 プロパティファイルから、String配列の値を取り込む方法は、他の方々が回答されているように、文字列で受け取り、自分で分解することが一番現実的だと思います。 どうしても、ResourceBundle#getStringArray()の呼び出しで、文字列の配列を取得したいのであれば、ResourceBundleの派生クラスを作り、handleGetObject()でカンマ区切りの場合は、文字列の配列を返すように実装することになるでしょう。 ハナさんは開発環境のバージョンが記載されていないので、確実とはいえないですが、多分同じ原因だと思います。 # 1.5βでも同様に、ClassCastExceptionが送出されるから。 | ||||||||||||||||
|
投稿日時: 2004-04-18 01:42
ニシトミです
やっぱりそうなんですよね 便乗質問になってしまいますが ResourceBundle#getStringArray()って ClassCast投げるじゃないですかぁ ResourceBundle#getObject()でgetClass() やってもStrngしか取れない(当たり前ですが) 親でStringしか取れないのに、String[]返すメソッドを持ってる こんなのってありですか?って思ったんです。 またへんな事を言ってるかもしれません もしかしてjavaのバージョンが上がれば hairetu = {"hoge","hoge1"} こんな感じで取得できるのかも? [ メッセージ編集済み 編集者: ニシトミ 編集日時 2004-04-18 01:47 ] |