web-dev-qa-db-ja.com

Javaプロパティファイルの使い方

私は、Javaプロパティファイルとして保存し、後でロードして反復したい構成値のキー/値ペアのリストを持っています。

質問:

  • ファイルをロードするクラスと同じパッケージにファイルを格納する必要がありますか。それとも、ファイルを配置する特定の場所がありますか。
  • ファイルは特定の拡張子で終わっている必要がありますか、それとも.txtは問題ありませんか?
  • コードでファイルを読み込む方法
  • そして、どうやって中の値を反復することができますか?
214
Click Upvote

InputStreamをPropertyに渡すことができるので、ファイルはほとんどどこにでも置くことができ、何でも呼び出せます。

Properties properties = new Properties();
try {
  properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
  ...
}

以下のように繰り返します。

for(String key : properties.stringPropertyNames()) {
  String value = properties.getProperty(key);
  System.out.println(key + " => " + value);
}
241
Zed
  • あなたはあなたが好きな場所にファイルを保存することができます。 jarファイルに保存したい場合は、Class.getResourceAsStream()またはClassLoader.getResourceAsStream()を使用してアクセスします。ファイルシステム上にあれば、少し簡単です。

  • 私の経験では.propertiesがより一般的ですが、どんな拡張子でも問題ありません。

  • Java 6を使用している場合はInputStreamname__またはStreamReadername__を渡して、Properties.loadを使用してファイルをロードします。(の場合、( - === - )おそらく、ストリームのデフォルトのISO-8859-1エンコーディングの代わりにUTF-8とReadername__を使用してください。)

  • 通常のHashtablename__(Propertiesname__の派生元)を反復するときに繰り返します。 keySet()を使います。あるいは、propertyNames()によって返された列挙を使用することもできます。

78
Jon Skeet

プロパティファイルをクラスFooと同じパッケージに入れると、次のようにして簡単に読み込むことができます。

new Properties().load(Foo.class.getResourceAsStream("file.properties"))

PropertiesがHashtableを拡張することを考えれば、Hashtableと同じ方法で値を反復することができます。

* .properties拡張子を使用すると、エディタのサポートを受けることができます。 Eclipseにはプロパティファイルエディタがあります。

26
Fabian Steeg

propertiesファイルを作成して読み込む方法はたくさんあります。

  1. ファイルを同じパッケージに保管してください。
  2. .properties拡張をお勧めしますが、あなたはあなた自身のものを選ぶことができます。
  3. Java.util package => PropertiesListResourceBundleResourceBundleクラスにあるこれらのクラスを使用します。
  4. プロパティを読み取るには、反復子、列挙子、またはPropertiesクラスまたはJava.lang.Systemクラスの直接メソッドを使用します。

ResourceBundleクラス:

 ResourceBundle rb = ResourceBundle.getBundle("prop"); // prop.properties
 System.out.println(rb.getString("key"));

Propertiesクラス:

Properties ps = new Properties();
ps.Load(new Java.io.FileInputStream("my.properties"));
11
adatapost

例:

Properties pro = new Properties();
FileInputStream in = new FileInputStream("D:/prop/prop.properties");
pro.load(in);
String temp1[];
String temp2[];
// getting values from property file
String username = pro.getProperty("usernamev3");//key value in prop file 
String password = pro.getProperty("passwordv3");//eg. username="zub"
String delimiter = ",";                         //password="abc"
temp1=username.split(delimiter);
temp2=password.split(delimiter);
5
zubair

これはプロパティファイルをロードします。

Properties prop = new Properties();
InputStream stream = ...; //the stream to the file
try {
  prop.load(stream);
} finally {
  stream.close();
}

私はすべての設定ファイルがあるディレクトリに.propertiesファイルを置くのに使います、私はそれをアクセスするクラスと一緒にそれを置きません、しかしここで制限はありません。

名前のために...私は冗長さのために.propertiesを使用します、あなたが望まないのなら私はあなたがそれを.propertiesと名付けるべきではないと思います。

5

プロパティファイルを読み込み、その内容をPropertiesに読み込む

String filename = "sample.properties";
Properties properties = new Properties();

input = this.getClass().getClassLoader().getResourceAsStream(filename);
properties.load(input);

以下はPropertiesを反復処理する効率的な方法です。

    for (Entry<Object, Object> entry : properties.entrySet()) {

        System.out.println(entry.getKey() + " => " + entry.getValue());
    }
3
Jobin Joseph

特性は遺産になりました。 Preferences classはPropertiesよりも優先されます。

嗜好データの階層的集合の中のノード。このクラスを使用すると、アプリケーションはユーザーとシステムの設定および構成データを格納および取得できます。このデータは実装依存のバッキングストアに永続的に格納されます。一般的な実装には、フラットファイル、OS固有のレジストリ、ディレクトリサーバー、SQLデータベースなどがあります。このクラスのユーザーは、バッキングストアの詳細について気にする必要はありません。

Stringベースのキーと値のペアであるプロパティとは異なり、Preferencesクラスには、基本データを取得してPreferencesデータストアに格納するためのメソッドがいくつかあります。次の種類のデータのみを使用できます。

  1. ひも
  2. ブール値
  3. ダブル
  4. float
  5. int
  6. 長いです
  7. バイト配列

プロパティファイルをロードするには、絶対パスを指定するか、プロパティファイルがクラスパスに存在する場合はgetResourceAsStream()を使用します。

package com.mypack.test;

import Java.io.*;
import Java.util.*;
import Java.util.prefs.Preferences;

public class PreferencesExample {

    public static void main(String args[]) throws FileNotFoundException {
        Preferences ps = Preferences.userNodeForPackage(PreferencesExample.class);
        // Load file object
        File fileObj = new File("d:\\data.xml");
        try {
            FileInputStream fis = new FileInputStream(fileObj);
            ps.importPreferences(fis);
            System.out.println("Prefereces:"+ps);
            System.out.println("Get property1:"+ps.getInt("property1",10));

        } catch (Exception err) {
            err.printStackTrace();
        }
    }
}

xmlファイル:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preferences SYSTEM 'http://Java.Sun.com/dtd/preferences.dtd'>
<preferences EXTERNAL_XML_VERSION="1.0">
<root type="user">
<map />
<node name="com">
  <map />
  <node name="mypack">
    <map />
    <node name="test">
      <map>
        <entry key="property1" value="80" />
        <entry key="property2" value="Red" />
      </map>
    </node>
  </node>
</node>
</root>
</preferences>

こちらを見てください 記事 環境設定ストアの内部

3
Ravindra babu

デフォルトでは、Javaはアプリケーションの作業ディレクトリでそれを開きます(この動作は実際には使用されているOSによって異なります)。ファイルをロードするには、次のようにします。

Properties props = new Java.util.Properties();
FileInputStream fis new FileInputStream("myfile.txt");
props.load(fis)

そのため、プロパティファイルには任意のファイル拡張子を使用できます。さらに、FileInputStreamを使用できるのであれば、ファイルはどこにでも保存できます。

最新のフレームワークを使用する場合の関連する注意事項として、フレームワークはプロパティファイルを開くための追加の方法を提供することがあります。たとえば、SpringはJARファイル内からパッケージ名を使用してプロパティファイルをロードするためのClassPathResourceを提供しています。

プロパティの繰り返し処理については、一度プロパティがロードされると、それらはJava.util.Propertiesオブジェクトに格納されます。これはpropertyNames()メソッドを提供します。

3

順番に:

  1. ファイルはほとんどどこにでも保存できます。
  2. 拡張子は必要ありません。
  3. Montecristoには イラスト付き これをどうロードするかがあります。それはうまくいくはずです。
  4. propertyNames() は繰り返し処理を行うための列挙型を提供します。
3
Brian Agnew

1)プロパティファイルをクラスパスに含めるのは良いことですが、プロジェクト内のどこにでも配置できます。

以下は、クラスパスからプロパティファイルを読み込み、すべてのプロパティを読み込む方法です。

Properties prop = new Properties();
InputStream input = null;

try {

    String filename = "path to property file";
    input = getClass().getClassLoader().getResourceAsStream(filename);
    if (input == null) {
        System.out.println("Sorry, unable to find " + filename);
        return;
    }

    prop.load(input);

    Enumeration<?> e = prop.propertyNames();
    while (e.hasMoreElements()) {
        String key = (String) e.nextElement();
        String value = prop.getProperty(key);
        System.out.println("Key : " + key + ", Value : " + value);
    }

} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (input != null) {
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2)プロパティファイルの拡張子は.propertiesです。

2
Jitender Chahar

In Java 8あなたのすべてのプロパティを取得する

public static Map<String, String> readPropertiesFile(String location) throws Exception {

    Map<String, String> properties = new HashMap<>();

    Properties props = new Properties();
    props.load(new FileInputStream(new File(location)));

    props.forEach((key, value) -> {
        properties.put(key.toString(), value.toString());
    });

    return properties;
}
2
Radouane ROUFID

私は昨年、この財産枠組みについて書きました。それはプロパティをロードするための複数の方法を提供し、それらを同様に強く型付けさせるでしょう。

ご覧ください http://sourceforge.net/projects/jhpropertiestyp/

JHPropertiesTypedは開発者に強く型付けされたプロパティを与えます。既存のプロジェクトに簡単に統合できます。プロパティタイプの大規模なシリーズによって処理されます。 property IOの実装により、プロパティを一行で初期化することができます。開発者に独自のプロパティタイプとプロパティIOを作成する権限を与えます。上のスクリーンショットはWebデモもあります。あなたがそれを使用することを選択した場合、プロパティを管理するためのWebフロントエンドの標準実装もあります。

完全なドキュメンテーション、チュートリアル、javadoc、faqなどはプロジェクトのウェブページにあります。

1
FrederikH

これは、プロパティを反復処理するもう1つの方法です。

Enumeration eProps = properties.propertyNames();
while (eProps.hasMoreElements()) { 
    String key = (String) eProps.nextElement(); 
    String value = properties.getProperty(key); 
    System.out.println(key + " => " + value); 
}
1
dertoni

ここで準備ができている静的クラス

import Java.io.*;
import Java.util.Properties;
public class Settings {
    public static String Get(String name,String defVal){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            FileReader reader = new FileReader(configFile);
            Properties props = new Properties();
            props.load(reader);
            reader.close();
            return props.getProperty(name);
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
            return defVal;
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
            return defVal;
        } catch (Exception ex){
            logger.error(ex);
            return defVal;
        }
    }
    public static Integer Get(String name,Integer defVal){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            FileReader reader = new FileReader(configFile);
            Properties props = new Properties();
            props.load(reader);
            reader.close();
            return Integer.valueOf(props.getProperty(name));
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
            return defVal;
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
            return defVal;
        } catch (Exception ex){
            logger.error(ex);
            return defVal;
        }
    }
    public static Boolean Get(String name,Boolean defVal){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            FileReader reader = new FileReader(configFile);
            Properties props = new Properties();
            props.load(reader);
            reader.close();
            return Boolean.valueOf(props.getProperty(name));
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
            return defVal;
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
            return defVal;
        } catch (Exception ex){
            logger.error(ex);
            return defVal;
        }
    }
    public static void Set(String name, String value){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            Properties props = new Properties();
            FileReader reader = new FileReader(configFile);
            props.load(reader);
            props.setProperty(name, value.toString());
            FileWriter writer = new FileWriter(configFile);
            props.store(writer, Variables.SETTINGS_COMMENT);
            writer.close();
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
        } catch (Exception ex){
            logger.error(ex);
        }
    }
    public static void Set(String name, Integer value){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            Properties props = new Properties();
            FileReader reader = new FileReader(configFile);
            props.load(reader);
            props.setProperty(name, value.toString());
            FileWriter writer = new FileWriter(configFile);
            props.store(writer,Variables.SETTINGS_COMMENT);
            writer.close();
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
        } catch (Exception ex){
            logger.error(ex);
        }
    }
    public static void Set(String name, Boolean value){
        File configFile = new File(Variables.SETTINGS_FILE);
        try {
            Properties props = new Properties();
            FileReader reader = new FileReader(configFile);
            props.load(reader);
            props.setProperty(name, value.toString());
            FileWriter writer = new FileWriter(configFile);
            props.store(writer,Variables.SETTINGS_COMMENT);
            writer.close();
        } catch (FileNotFoundException ex) {
            // file does not exist
            logger.error(ex);
        } catch (IOException ex) {
            // I/O error
            logger.error(ex);
        } catch (Exception ex){
            logger.error(ex);
        }
    }
}

ここでのサンプル:

Settings.Set("valueName1","value");
String val1=Settings.Get("valueName1","value");
Settings.Set("valueName2",true);
Boolean val2=Settings.Get("valueName2",true);
Settings.Set("valueName3",100);
Integer val3=Settings.Get("valueName3",100);
0
vitalinvent