1つのプロパティの説明:
プロパティはテキストファイルで、コンテンツのフォーマットは次のとおりです。
キー=値 #単一行コメントは
通常、パラメータ、国際リソースファイルとして構成されたシンプルな構成ファイルとして使用するのに適しています。
複雑な構成のために、我々はXML、YML、JSON待ちを使用する必要があります
2つのJavaの負荷のプロパティ:
主にパッケージ2のutilのツールをロードすることによって、Javaプロパティ:プロパティクラス、ResourceBundleのクラス
2.1プロパティクラスがによってロードされます。
入力ストリーム、リーダー:入力パラメータのストリームを受信するプロパティクラスローディング構成情報load()メソッド、。
プロパティは、get(String key)メソッドは、指定した構成項目を読み込みます。
2.1.1のInputStreamは、クラスローダを経由してロードされます:
このメソッドは、構成ファイルのクラスパスを読み取ることができます
(1)Propertiesオブジェクトを作成します
(2)入力ストリーム内に対応するプロパティファイルを取得します
(3)のプロパティは、入力ストリームにロード
(4)が、Properties.get(キー)の方法により取得された配置構成情報が存在しない場合、nullが返されます
/ ** *に基づいてクラスローダのプロパティを読む; *この実施形態にのみ読み取ることができ、構成ファイルのクラスパスを、より便利には限界がプロファイルクラスパス場合があります。 * / パブリック静的法1(){ボイド のSystem.out.println(「使用モードのClassLoaderローディングプロパティ」); プロパティプロパティ=新しい新しいプロパティ(); / * 入力ストリームに対応するプロファイルジェネレータを使用して*クラスローダのローディング特性。 *この方法を使用して、コンパイルが同じディレクトリにクラスファイルに配置されます後にプロパティファイルには、srcディレクトリに配置する必要がありますが必要です。 *クラスロードのベースパスはクラスファイルが(おそらくビン、クラス)をコンパイルしたディレクトリへの相対であるため、プロジェクトのルートディレクトリ内のプロパティは、プロパティファイルを見つけることができませんでした。この方法を使用する場合は、 * / // でなければなりません/で始まる 、クラスのルートディレクトリ内のファイルを探している = PropertiesDemo.class.getResourceAsStreamでのInputStream(「/properties/a.properties」); System.out.println( ""。PropertiesDemo.class.getClassLoader()のgetResource()ある、getPath())。 {試みる は、Properties.load(IN) }キャッチ(IOExceptionを電子){ // TODO自動生成されたcatchブロック e.printStackTrace(); }最後に{ closeResource(IN) } のSystem.out.println(properties.get( "名前") )。 System.out.println(properties.get( "年齢")); } |
リーダー2.1.2ロードを構築することにより:
この実施形態の利点は、設定ファイルを任意のパスで読み取ることができるということです
(1)Propertiesオブジェクトを作成します
(2)リーダーを作成し、パスを指定することができ、パスがクラスに限定されるものではなく、
(3)使用のプロパティはReaderがロードされました
(4)Properties.get(キー)メソッドは、設定を読み込み
/ ** * InputStreamを使用してコンフィギュレーションファイルを読み取り、 この実施形態の利点は、コンフィギュレーション・ファイルは、任意の経路で読み取ることができることである* * / パブリック静的ボイド方法2(){ System.out.printlnは(「負荷モード入力ストリームプロパティ」); プロパティ=プロパティ新しい新しいプロパティ(); BufferedReaderのリーダー= NULL; 試み{ / * *はSystem.getProperty(「はuser.dir」):プロジェクトのルートパスを取得し、その後、追加のコンフィギュレーション・ファイルのパス * / リーダーBufferedReaderの新しい新=(FileReaderの新新(システム.getProperty( "はuser.dir")+ "/properties/a.properties")); は、Properties.load(リーダー); System.out.printlnは(properties.get( "名前")); System.out.printlnは( properties.get( "年齢")); }キャッチ(にFileNotFoundException電子){ // TODO自動生成されたcatchブロック e.printStackTrace(); }キャッチ(IOExceptionを電子){ // TODO自動生成されたcatchブロック e.printStackTrace(); }最後に{ closeResource(リーダー)。 } } |
ResourceBundleクラスローダによって2.2:
ResourceBundleのは、2つの方法で配置されたお読みください。
(1)指定されたファイルパス:についてのSRC、クラスの相対パスと
(2)は、入力ストリームを提供
するResourceBundleは構成項目を読み取るための方法のgetString(キー)とのgetObject(キー)を提供する
パス・ロードを使用して、必要なファイル拡張子を指定しないで、そして必要としません手動で、Propertiesクラスよりも簡単操作を、関連するリソースをシャットダウンします。
/** * 通过ResourceBundle 读取配置, 此种方式项目Properties要简单 * ResourceBundle读取配置有2种方式: (1)指定文件路径 (2)提供InputStream */ public static void method3() { System.out.println("使用ResourceBundle方式加载properties"); /* * (1)直接指定文件路径: * 可以使用相对路径,从类路径开始,且不需要指定properties文件的后缀 */ ResourceBundle resource = ResourceBundle.getBundle("properties/b"); System.out.println(resource.getString("name")); System.out.println(resource.getString("age")); try { /* * (2)通过InputStream加载配置: * 通过当前类的class实例,获取资源输入流 */ resource = new PropertyResourceBundle(PropertiesDemo.class.getResourceAsStream("/properties/a.properties")); System.out.println(resource.getString("name")); System.out.println(resource.getString("age")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } |