6

次のプロパティ ファイルを使用します。

foo=hello, world!
bar=first,second

最初の項目を文字列として、2 番目の項目を配列として取得したいと思います。getString私はvsgetStringArrayがこれに対処すると思っていたでしょうが、そうではありません -getString("foo")コンマの前にすべてを取得するだけです。つまり、「こんにちは」です。

を使用して区切り文字の解析を無効にするsetDelimiterParsingDisabledと、 foo は問題ありませんが、これにより の動作が変更getStringArray("bar")され、単一要素の配列が返されます。

個々の構成項目を文字列または配列として解釈する方法を明示的に伝える方法が見つかりません。構成項目を異なる区切り文字ルールを持つ個別の構成ファイルに入れたくありません。また、getStringArray の場合の区切り文字としてコンマを使用することをお勧めします。

詳しく説明すると、このスニペットは、hello - 2またはhello, world! - 1- I want it to print hello, world! - 2!のいずれかを出力します。

AbstractFileConfiguration config = new PropertiesConfiguration();
config.setFileName("C:\\temp\\temp.properties");
//config.setDelimiterParsingDisabled(true);
config.load();
System.out.println(config.getString("foo") + " - " + config.getStringArray("bar").length);
4

2 に答える 2

4

ご存知のように、CommonsConfigにはgetPlainString()メソッドのようなものがありません。回避策のいくつかの提案があります。

別のリスト区切り文字を使用するのが最も簡単に実装できると思います。より複雑なものが必要な場合は、他の2つを検討してください。

setListDelimiter()で別のリスト区切り文字を使用する

文字列および配列と同じ値を解釈する必要がない限り、機能します。

プロパティファイル:

foo=hello, world!
bar=first;second

コード:

AbstractFileConfiguration config = new PropertiesConfiguration();
config.setFileName("C:\\temp\\temp.properties");
config.setListDelimiter(';');
config.load();
System.out.println(config.getString("foo") + " - " + config.getStringArray("bar").length);

区切り文字の解析を無効にして、独自の分割を行います

String.split()で簡単に実行できます。単純な静的メソッドは次のことを行います。

public static String[] gerStringArray(Configuration config, String key)

または、とメソッドのサブクラスを作成してPropertiesConfigurationオーバーライドします。getStringArray()getList()

2つの異なる構成を使用する

1つは、データの形式がわかっている設定データ用です。ここで、区切り文字の解析をアクティブにできます。

1つは、任意のデータがある可能性のあるテキストデータ用です。ここで、区切り文字の解析を無効にする必要があります。

これには、設定とテキストデータを分離するという追加の利点があります。

  • 設定とテキストデータを混在させないことで、両方の構成をよりクリーンに保つことができます。特に両方がたくさんある場合。
  • 多くの場合、設定データは展開環境(ライブ/テスト)に応じて変更され、テキストデータはロケール(en_GB / de_DE)に応じて変更されます。
于 2012-08-16T19:27:55.333 に答える