2017-06-20 24 views
-2

プロパティファイルの解釈にクラスorg.apache.commons.configuration.PropertiesConfigurationを使用しています。二重引用符で囲まれたコンマは、PropertiesConfigurationによって正しく読み込まれません。

PropertiesConfiguration props = new PropertiesConfiguration(path); 
String delimiter = props.getString("FIELD_DELIMITER"); 

シナリオ1つを除いてすべてが問題ありません。 FIELD_DELIMITERの値は、次に","

FIELD_DELIMTIER="," 

として提供される場合、文字列delimiterの値は"として得られます。 これ以外の値はすべて期待どおりに動作します。プロパティは次のように与えられた場合、例えば:

FIELD_DELIMITER="a" 

(予想通り)[文字列delimiterの値が"a"として得られます。

私は問題を解明しようとしました。私は、コンパイラがのコンマ区切り配列と解釈し、最初の文字、つまり"だけを読み込んで残りを残すことに気付きました。私が読むことを期待しているコンマは決して値として解釈されません。これは、私がの代わりにgetString()というメソッドを呼び出すと、このようには起こりません。

どうすれば","を読むことができますか? カンマ区切りの値で他のプロパティを読み取る必要があるため、値を分割するデフォルトの区切り文字は変更できません。形式はprops.getStringArray()です。

+1

奇妙だ、そのクラスのJavadocは何をするかを説明します:https://commons.apache.org/proper/commons-configuration/apidocs /org/apache/commons/configuration2/PropertiesConfiguration.html。どのようにすることができますか? – Tom

+0

ここで質問をする前に、ドキュメントを読んでいないと思ってはいけません。これが起こったと思わない場合は、自分で試してみてください。 @Tom – Amita

+0

あなたはドキュメントを読んでいると主張していますが、文字列の一部として "、"を使用する方法はまだ分かりませんでした。あるいは、ドキュメントの解決策がうまくいかなかったと言いたいのですか?なぜあなたは質問にそれを追加していないのですか? – Tom

答えて

0

JavaDocによれば、コンマをエスケープできるようです。 (ドキュメントから)

例:

# commas may be escaped in tokens commas.escaped = Hi\, what'up?

+0

あなたはそうですが、実際にプロパティファイルを変更することはできません。これは、他のソースからコードに渡されるためです。 – Amita

+1

この場合、カンマをエスケープするためにプロパティを変更するファイルの所有者を取得できない場合は、Apache Commons以外のものを使用することができます。 –

関連する問題