Java アプリケーションで作業する場合、データベースの URL、サーバーのポートなど、いくつかの構成を操作する必要があるのが一般的です。これらの設定をコードに直接ハードコーディングするのではなく、プロパティ ファイルなど、コードの外部の場所から設定を取得することに興味があります。または、実行時に構成を保存して後で読み取ることもできます。
これらのいずれの場合でも、特定のシナリオに合わせて独自のソリューションを開発できます。たとえば、テキスト ファイルを作成し、1 行目にデータベースの URL、2 行目にサーバー ポートなどを保存します。しかし、これは面倒でエラーが発生しやすいため、より堅牢でスケーラブルなソリューションが必要です。このタイプのケースに対して、Java は、Properties クラスという非常にシンプルで効率的なソリューションを提供します。
Properties は java.util パッケージにあるクラスで、設定をメモリに一時的に保存することも、プロパティ ファイルに永続的に保存することもできるため、後でそれらを読み取ってアプリケーションで使用することができます。 Properties クラスのインスタンスを作成すると、辞書のように動作するオブジェクトが得られ、各設定がキーと値のペアとして保存されます。
まず、Properties クラスのインスタンスを作成する必要があります。
Properties props = new Properties();
HashTable クラス (つまり Dictionary から継承) を継承すると、Properties クラス内に Object 型のメソッドがあることがわかりますが、実際には値は文字列または String であることが期待されます。ではなく、値を操作するたびに String をキャストする必要はありません。このように、インスタンス内にはマップの共通メソッドがありますが、ほとんどの場合、それらを使用する必要はありません。たとえば、get(Object key) を使用する代わりに、getProperty(String key) を使用できます。
プロパティを定義するには、setProperty(String key, String value) メソッドが使用されます。その名前が示すように、このメソッドは 2 つのパラメータ、キー (プロパティの呼び出し方法) と値 (プロパティの値) を受け取ります。 )、両方のパラメーターが常に String 型であると想定されることを考慮します。
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
プロパティを取得するには、getProperty(String key) メソッドを使用します。このメソッドは、取得するプロパティのキーをパラメータとして受け取ります。プロパティが存在しない場合は、null が返されます。
Properties props = new Properties();
プロパティが存在しない場合に null を取得しないようにするには、2 番目のパラメーターとしてデフォルト値を受け取る getProperty(String key, String defaultValue) メソッドを使用できます。
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
これはマップ型オブジェクトであるため (ただし、HashTable メソッドの使用は推奨されません)、entrySet() メソッドがありますが、ご覧のとおり、オブジェクト型であるため、すべてのプロパティを反復処理する代替手段は次のとおりです。 stringPropertyNames() メソッドを使用すると、すべてのプロパティ キーを含む文字列のセットが返されます (返される値は特定の順序ではありません)。
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
すべてのプロパティをより速く表示する方法は、list(PrintStream out) メソッドを使用することです。このメソッドは、パラメータとして渡された出力ストリーム (System.out など) にすべてのプロパティを出力します。
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Properties は、store() メソッドと storeToXML() メソッドを提供し、プロパティを properties (key=value) 形式と XML 形式 (これはプロパティが異なる環境で使用される場合に便利です)。 save() メソッドは使用しないでください。このメソッドは廃止されており、エラーが発生した場合に例外をスローしないため、使用はお勧めできません。
プロパティをファイルに保存する前に、次の手順を実行して、store() および System.out メソッドを使用して実際に保存された内容をコンソールで確認できます。スローされる例外を何らかの方法で制御することが重要です。
for (String prop : props.stringPropertyNames()) { System.out.println(prop + " = " + props.getProperty(prop)); } // Output DB_PORT = 3306 DB_PASS = p4ssw0rd DB_USER = root DB_HOST = localhost
結果を分析すると、最初の行では 2 番目の引数として渡されたコメントが保存されており (空の文字列であっても構いません。null の場合は出力されません)、 2 行目にはプロパティが保存された日時が保存され、3 行目からは key=value.
の形式でプロパティが保存されます。storeToXML() メソッドを使用すると、次の内容のファイルが取得されます。
props.list(System.out); // Output -- listing properties -- DB_PORT=3306 DB_PASS=p4ssw0rd DB_USER=root DB_HOST=localhost
db.properties というファイルにプロパティを保存するには、次の操作を実行できます:
props.store(System.out, "Database Configuration"); // Output #Database Configuration #Thu Oct 10 11:06:04 CST 2024 DB_HOST=localhost DB_PASS=p4ssw0rd DB_PORT=3306 DB_USER=root
実行後、例外がスローされなければ、プログラムが実行されたディレクトリに db.properties という名前のファイルが次の内容で作成されていることがわかります。
props.storeToXML(System.out, "Database Configuration"); // Output <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Database Configuration</comment> <entry key="DB_PORT">3306</entry> <entry key="DB_PASS">p4ssw0rd</entry> <entry key="DB_USER">root</entry> <entry key="DB_HOST">localhost</entry> </properties>
プロパティを XML 形式で保存するには、store() メソッドを storeToXML() に変更するだけです。
Properties props = new Properties();
db.properties ファイルまたは db.properties.xml ファイル内でいくつかのプロパティが変更されているか、新しいプロパティが追加されていると仮定して、properties または XML では、load() メソッドとloadFromXML() メソッドをそれぞれ使用できます。ファイルが存在しない場合、または読み取れない場合にスローされる例外を何らかの方法で制御することが重要です。
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
以上がJavaでPropertiesクラスを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。