- ベストアンサー
プロパティーのセットと取得方法、値の初期状態への戻し方とは?
- プロパティーをセットする方法には「A.conf」ファイルを作成し、key=valueの形式で書く方法とSystem.getProperties().put(key,value)の方法があります。
- プロパティーを取得する方法はSystem.getProperties()を使用します。
- 値を初期状態へ戻す方法はSystem.getProperties().remove(key)を使用しますが、これを使用するとkey自体が消去されてしまいます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
難しく感じるかもしれませんが、とにかく、APIを読んでみましょう。 java.util.Propertiesの冒頭に、putについて書かれています。 「Properties は Hashtable を継承するので、Properties オブジェクトに対して put メソッドおよび putAll メソッドを適用できます。しかし、これらのメソッドを使用することは推奨されません。これらのメソッドを使うと、呼び出し側にキーまたは値が String ではないエントリを挿入させるからです。」 前回、つい書き忘れてしまいましたが、上記にある通り、putは使うべきではないです。 Propertiesクラスは、汎用的なHashtableを拡張して、文字列のキーと値にもつプロパティを扱うことに特化したクラスであり、setPropertyやgetPropertyを使う限りは「KeyもValueも文字列である」ことが保証される(そうでないコードを書くとコンパイルエラーになる)ものです。 で、上記の点を修正して、 System.getProperties().setProperty(key, value); System.setProperty(key, value); の何が違うかというと、結果は同じです。 上のほうはSystem.getProperties()で、システムが持つPropertiesオブジェクトへの参照をいったん取得して、そのオブジェクトにsetPropertyしているということです。 同じことであれば、簡潔にかける下のほうが良いでしょう。 せっかく「システムプロパティを設定する」目的でSystem.getProperty()メソッドが用意してあることですし。
その他の回答 (2)
- thelma
- ベストアンサー率66% (20/30)
前者の使い方だと、 「まず、現在のシステムプロパティの値をデフォルト値として持つPropertiesオブジェクトを作成して、別ファイルから個別の値をロードし、システムプロパティを設定し直す」 というやり方なので、複数のプロパティを一気に更新したい場合に向いているのではないでしょうか。 それに対して後者のやり方は、システムプロパティを直接ひとつずつ設定していくやり方です。 Propertiesクラスには、プロパティの初期値を覚えておくような機能はありません。 なので、自分でその仕組みを作る必要があるでしょう。 Propertiesオブジェクトの初期化タイミングで、初期状態のオブジェクトの複製をどこかに保持しておき、例えばresetメソッドを呼び出すと、初期状態のオブジェクトを元に戻す、という処理になるかと思います。
お礼
回答、有難うございます。 実は、JAVAのAPIっていつ読んでもあんまり理解できないんです。 System.setProperty(key,value); と System.getProperties().put(key,value); は同じことなんですか? すみません。お礼が質問になってしまいました。
- watapen
- ベストアンサー率10% (5/48)
前者は自分でつくったpropertiesファイルを読み込むためにつかい後者はSystemのプロパティを読み込むときにつかうのではないでしょうか? セットした状態を元に戻すというのはファイルを削除することではなくPropetiesインスタンスの中身をクリアにするということですよね? 前者のpをp=new Properties()をすれば初期状態にもどるのではないでしょうか?
お礼
回答有難うございます。 p=new Properties(); ってそのまま書けばいいのでしょうか? システムプロパティにネットワークのプロパティ socksProxySet socksProxyHost socksProxyPort の3つのキーを追加し、値をセットしたいのです。 この値がセットされていない状態を初期状態と考えたいと思います。 Socksを経由したり経由しなかったりの通信をしたいんです。 p=new Properties()とすれば簡単にシステムのプロパティは元に戻るんですか?
お礼
お礼が遅くなりましたが、大変よくわかりました! 有難うございます!