0

プロパティ ファイルを直接マップに読み込みたいと考えています。次のような例を見つけました:

def propsFile = new File(fileName)
props.load(propsFile.newDataInputStream())
props.each { k,v->
     println "${k} /// ${v}\n"
}

わかりました、次のような行で正しく機能します:

toto=titi

つまり、キーに空白が含まれていません。しかし、キーが次のようになるプロパティファイルを処理する必要があります

This is a key (example)=Value

This is a key (example)鍵はどこにあるでしょう。上記の例は、最初の単語 (This) をキーとして指定するため、まったく機能しません。したがって、キーと値の区切り記号が = であり、他の文字がないことを伝える方法はありますか。

そうでない場合、il は行ごとに読み取り、分割します...しかし、もしあれば、よりエレガントなソリューションを好むでしょう。

助けてくれてありがとう

4

1 に答える 1

0

プロパティ ファイルが仕様に従っていない場合 (キー名にスペースがエスケープされている場合)、独自のパーサーを作成し、1 行ずつ実行する必要があります。

それほど難しくはありませんが、次のようなものを使用できるはずです。

String props = '''toto = titi
                 |foo=bar
                 |# comment
                 |
                 |way and hay = yes'''.stripMargin()

Map properties = props.split( '\n' )
                      .findAll { !it.startsWith( '#' ) && it.trim().length() }
                      .collectEntries { line ->
  line.tokenize( '=' )*.trim()
}
于 2013-01-25T14:57:25.390 に答える