JavaのPropertiesクラスは、詳細な使用しています
アウトライン
プロパティのHashtableから継承されました。不変のプロパティセットを表し、キーと値の形式でプロパティのリストが存在し、キーと値は文字列です。
プロパティクラスは、多くのJavaクラスによって使用されています。値として環境変数を取得する場合、例えば、それはSystem.getProperties()メソッドを返します。
我々は、多くのしているシナリオは、ハードコーディングを避けるために必要なプロパティの使用は、JDBC、MyBatisのフレームワークとして、必要な設定情報をロードするためのプログラムの下にファイルが必要です。プロパティのカテゴリから情報を読み取るか、プロパティがプロパティファイルには、プロパティクラスを経由する必要があり、ファイルに情報を書き込むかどうか、ブリッジのプロパティファイルやプログラムの途中です。
一般的な方法
離れたハッシュテーブルで定義されている方法から、プロパティは以下のメソッドを定義します。
ここからは、書き込み、読み込み、トラバース一般的な使用のプロパティのクラスを解決するための視点:
書きます
メモリに保存されているキーのsetPropertyメソッドを呼び出して、プロパティクラスは、その後、getPropertyメソッド、propertyNamesトラバース法で読み取りますが、キーと値のペアのプロパティファイルに保持されませんでした、それは重要な永続のstoreメソッドを呼び出す必要がありますプロパティファイルの値。
パッケージcn.habitdiary。 輸入java.io.FileInputStream; 輸入java.io.FileOutputStreamは、 インポートにjava.io.IOException; 輸入java.io.InputStreamを。 インポートにjava.io.OutputStream; 輸入java.util.Date; インポートのjava.util.Enumeration; 輸入java.util.Properties; 輸入junit.framework.TestCase; パブリック クラス PropertiesTesterが延びてテストケースを{ 公共 ボイドWritePropertiesイベント(){ プロパティのプロパティ = 新規プロパティ(); のOutputStream出力 =はnull ; 試す{ 出力は = 新しいのFileOutputStream( "config.properties" ); properties.setProperty( "URL"、 "JDBCます。mysql:// localhostを:3306 /" ); properties.setProperty( "ユーザ名"、 "ルート" )。 properties.setProperty( "パスワード"、 "ルート" ); properties.setProperty( "データベース"、 "ユーザー")。// 保存键值对到内存 properties.store(出力、+ "Steven1997は変更" 新しい。日付()のtoString()); } (IOExceptionをIO){ io.printStackTrace()。 } 最後に{ 場合(!出力= NULL ){ 試みる{ )(output.close。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } } } }
読みます
ここではプロパティファイルの6種類を読み込むための一般的な方法は以下のとおりです。
パッケージcn.habitdiary。 輸入java.io.BufferedInputStreamの。 インポートのjava.io.File; 輸入java.io.FileInputStream; 輸入java.io.FileNotFoundException。 インポートにjava.io.IOException; 輸入java.io.InputStreamを。 インポートたjava.util.Locale; 輸入java.util.Properties; 輸入java.util.PropertyResourceBundleの。 輸入はjava.util.ResourceBundle。 / ** *读取性質文件的方式 * * / パブリック クラスLoadPropertiesFileUtil { プライベート 静的文字列basePathを= "SRC /メイン/ javaの/ CN / habitdiary / prop.properties" ; プライベート 静的な文字列のパス=「」; / ** *一、使用java.util.Properties类的負荷(入力ストリームで)加载プロパティ文件方法 * * @return * / パブリック 静的な文字列getPath1(){ しようと{ にInputStreamを = 新しい BufferedInputStreamを(新しいFileInputStreamを( 新しいファイル( basePathを))); プロパティは、小道具 = 新しい)(プロパティ。 prop.load(中) 道Prop.getProperty =( "パス" ); } キャッチ(FileNotFoundExceptionをE){ System.out.printlnは( "エラーで書かれたプロパティファイルのパスは、チェックしてください!" ); E.printStackTrace(); } キャッチ(IOExceptionをE){ e.printStackTrace(); } 戻り経路; } / ** *第二に、使用getBundleのjava.util.ResourceBundleのクラス()メソッド *注:このパラメータは、getBundleの()メソッドは、ファイル名+プロパティパッケージのパスのように書くことができる、または例外 * * @return * / パブリック 静的文字列getPath2(){ ResourceBundleのRB =のResourceBundle .getBundle( "CN / habitdiary /プロップ" ); パス = rb.getString( "パス" )。 リターンパス。 } / ** *三、使用java.util.PropertyResourceBundleの类的构造函数 * * @return * / パブリック 静的文字列getPath3(){ 入力ストリームにおいて、 試す{ に = 新しい BufferedInputStreamを(新規のFileInputStream(basePathを))。 ResourceBundleのRB = 新しいPropertyResourceBundleは(中)。 パス = rb.getString( "パス"); } キャッチ(にFileNotFoundException E){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } キャッチ(IOExceptionをE){ e.printStackTrace(); } 戻り経路; } / ** *クラス変数の使用getResourceAsStream()メソッド *注:getResourceAsStreamパラメータ()メソッドフォーマットプロパティパッケージパス+ファイル名+拡張子を書き込む。 * * @return * / パブリック 静的文字列getPath4(){ で入力ストリーム = LoadPropertiesFileUtil。クラス .getResourceAsStream("CN / habitdiary / prop.properties" ); プロパティP = 新しい新しいプロパティ(); 試み{ p.load(IN); パス = p.getProperty( "パス" ); } キャッチ(IOExceptionをE){ e.printStackTrace( ); } 戻り経路; } / ** * V. *使用のclass.getClassLoader()得られたjava.lang.ClassLoaderのある getResourceAsStreamの()メソッド* *パッケージパス+ファイル名+でなければならない方法のgetResourceAsStream(名前)パラメータサフィックス *それ以外の場合は報告しますnullポインタ例外 * @return * / パブリック 静的ストリングgetPath5(){ で入力ストリーム = LoadPropertiesFileUtil。クラス.getClassLoader() .getResourceAsStream( "CN / habitdiary / prop.properties" ); プロパティpを = 新しいプロパティ(); 試す{ p.load(に); パス = p.getProperty( "パス" )。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } リターンパス。 } / ** *六、使用java.lang.ClassLoaderの类的getSystemResourceAsStream()静态方法 *パラメータフォーマットgetSystemResourceAsStream()メソッドで固定必要 * * @return e.printStackTrace();* / パブリック 静的文字列getPath6(){ で入力ストリーム = クラスローダ .getSystemResourceAsStream( "CN / habitdiary / prop.properties" )。 プロパティpを = 新しいプロパティ(); 試す{ p.load(に); パス = p.getProperty( "パス" )。 } キャッチ(IOExceptionを電子){ // TODO自動生成されたcatchブロック メイン(文字列[]引数){ } リターンパス。 } パブリック 静的 ボイド のSystem.out.println(LoadPropertiesFileUtil.getPath1())。 System.out.println(LoadPropertiesFileUtil.getPath2())。 System.out.println(LoadPropertiesFileUtil.getPath3())。 System.out.println(LoadPropertiesFileUtil.getPath4())。 System.out.println(LoadPropertiesFileUtil.getPath5())。 System.out.println(LoadPropertiesFileUtil.getPath6())。 } }
前記第一、4つ、5つは、入力ストリームファイルを取得する6つの方法は、次にロードプロパティプロパティオブジェクトクラス(入力ストリームあるinStream)、プロパティオブジェクトによって操作されるファイルの最終的な内容で方法にロードされます。
第二に、アプローチは体操のResourceBundleプロパティは、コンテンツファイル行うためのオブジェクトは、三つのファイルのプロパティのResourceBundleクラスをロードすることです。
あなたは、ファイル、ロードするためのフォーマット定義された方法に従って各モードのニーズへのファイルパスをロードする際に最も重要なことは、それ以外の場合は、nullポインタ例外として、さまざまな例外をスローします、です。
トラバーサル
特定のプロパティですべてのキーをトラバースする方法の以下の4つの種類:
/ ** *キーと値の出力特性を * / パブリック 静的 ボイドprintProp(プロパティのプロパティ){ するSystem.out.println(「---------(実施例A)--------- --- " ); のための(文字列キー:properties.stringPropertyNames()){ System.out.printlnは(キー +" = "+ Properties.getProperty(キー)); } のSystem.out.println( " ---- -----(第二のアプローチ)----------------------- " ); セット <オブジェクト> = properties.keySetキーは(); // 設定キー属性返す ため(オブジェクトキー:キー) { のSystem.out.println(key.toString() + "=" +properties.get(キー)); } のSystem.out.println( "---------(第3のアプローチ)-----------------------" ); セットのMap.Entryの<<オブジェクト、オブジェクト>>のentrySet = properties.entrySet(); // エンティティのキー属性を返す ため(のMap.Entryの<オブジェクト、オブジェクト> エントリ:のentrySet){ System.out.printlnは(entry.getKey() + " = "+ entry.getValue()); } のSystem.out.println( " ---------(4通り)----------------------- " ); 列挙 <?> = E properties.propertyNames(); 一方(E.hasMoreElements()){ 文字列キー =(文字列)e.nextElement(); 文字列値 = (キー)properties.getProperty。 System.out.println(キー + "=" + 値)。 } }