Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Jakarta Commons Configuration version1.1 - プロパティファイルに書き込む

プロパティファイルに書き込む

プロパティファイルにデータを書き込むには、save メソッドを呼び出すといい。
save メソッドには引数の違いなどでいくつかバリエーションがある。
これらは AbstractFileConfiguration, ProperteisConfiguration クラスで定義されているので、使うときには都合のいいものを javadoc 見て探すのが吉。

PropertiesConfiguration config = new PropertiesConfiguration("sample4.properties");
config.addProperty("props1", "props1_value");
config.save();

上は簡単な例です。あっさり簡単。

簡単だけど注意点もあります。
ファイルの再読込のときと同じ感じで、プロパティファイルの指定の仕方によっては思ったように保存ができない場合があります。
具体的には例のようにコードを書いた場合、プロパティファイルがカレントディレクトリにあるときには正常にファイルが上書きされるのですが、そうでないときには読み込んだファイルの上書きではなくカレントディレクトリに新しくファイルが作成されます。バグ。

自動で保存する

プロパティファイルへの書き出しは save メソッドを呼び出すだけだけれど、それすらも省略したいという場合には自動保存です。
AbstractFileConfiguration クラスで定義されている setAutoSave(boolean) メソッドを呼び出して自動保存を有効にします。

PropertiesConfiguration config = new PropertiesConfiguration("sample4.properties");
config.setAutoSave(true);
config.addProperty("props2", "props2_value");

こんな感じ。
PropertiesConfiguration は AbstractFileConfiguration を継承しているのでそのまま setAutoSave(boolean) メソッドを呼び出すことができます。

こうしておくとプロパティが追加されたり、変更されたりしたときに自動でファイルへの書き出しが行われるようになります。

サンプルコード

まずは読み込むプロパティファイル sample4.properties 。
ファイルがあればいいので中身は何でもいいです。

projectName=Commons Configuration Sample Project.

そしてメインになる部分です。

package javademo.config;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

public class Run {

    public static void main(String[] args){
       try{
            PropertiesConfiguration config = new PropertiesConfiguration("sample4.properties");
            config.addProperty("props1", "props1_value");
            config.save();
            
            config.setAutoSave(true);
            config.addProperty("props2", "props2_value");
        }
        catch(ConfigurationException e){
            e.printStackTrace();
            System.exit(1);
        }
    }
}

まとめ