私が取り組んでいるこのプロジェクトの構成ファイル (プロパティ) が必要です。問題は、Properties インスタンスがファイルからの読み込みに失敗することです (例外や目に見える問題はありません) が、適切に保存できます。
私はデフォルトの HashMap を持っているので、存在しないプロパティのデフォルト値は Properties インスタンスに配置され、すべてが保存されるため、運用サーバーが更新されたときに新しいプロパティがシームレスに追加されます。
このバグを何時間も追跡してきましたが、修正できません。ここ StackOverflow に関する多数の質問と、他のサイトのコード例を読みました。何も助けませんでした。
まだ削除せず、代わりに DB を使用した理由の 1 つは、JDBC ドライバーの URL、ユーザー、およびパスワードもそのファイルに格納されていることです。ファイルがハード ドライブに対して読み書きされていることに注意してください。
デフォルトのシステムではファイルが配置されるため、読み込もうとしたときにファイルが存在しなくても、保存後に表示されますが、次の実行では何も読み込まれません。設定を変更した後にバグに気付き、数回実行した後にファイルを確認したところ、驚いたことに、すべての値がデフォルトでした。
現在起こっていることは次のとおりです。1) ファイルがそこにあるかどうかに関係なく、プロパティは何もロードしません。2) Properties インスタンスには何もないため、デフォルトで埋められます。3) インスタンスが保存され、デフォルト値でファイルが上書きされます。
関連するすべてのコードは次のとおりです。
private static Properties getConfig(){
Properties properties = new Properties();
File cfgFile = new File("data/titallus.properties");
try{
if(cfgFile.createNewFile()){
System.out.println("Config file not found. A default config file will be created automatically.");
}
FileReader reader = new FileReader(cfgFile);
FileWriter writer = new FileWriter(cfgFile);
properties.load(reader);
reader.close();
System.out.println(properties); // Debug, always prints '{}'
for(String k : defaults.keySet()){
if(!properties.containsKey(k)){
properties.setProperty(k, defaults.get(k));
}
}
properties.store(writer, "Titallus Configuration File");
writer.close();
}catch(Exception e){
e.printStackTrace();
System.exit(-1);
}
return properties;
}
考えられる限りのことを試しましたが、無駄でした。また、多言語サポート用の Properties サブクラスもあり、これは問題なく動作します。
これを修正する方法、または少なくともこれに対する別のアプローチを知っている人はいますか?