11

多くの保存可能な設定を含む Java アプリケーションを作成しています。基本的に、私の構成構造は次のようになります。

設定
|_ ゲーム 1
   |_ ゲーム名: 何とか...
   |_ プレイヤー名: アリス
   |_ プレイヤー名: ボブ
   |_ その他の設定...
|_ ゲーム 2
   |_ ゲーム名: はぁ
   |_ プレイヤー名: アリス
   |_ プレイヤー名: ボブ
   |_ その他の設定...
|_ ゲーム n....

あなたはアイデアを得ました。私はxmlを使用しようとしましたが、dom4jで作業するのは苦痛です。特に、異なる親ノードと同じ親ノードに同じ名前の子ノードがたくさんあり、それらをたくさん変更する必要があります。これまでのところ、私が発見した最も手間のかからない方法は、次のようなプレーンテキストファイルを使用することです

【ゲーム1】
ゲーム名:何とか
プレイヤー名:アリス
選手名:ボブ
...

【ゲーム2】
...

しかし、これは非常に初歩的なことだと思います。Javaで構成ファイルを維持するための業界でのベストプラクティスまたは標準プラクティスは何ですか?

編集:あるコンピューターから別のコンピューターにファイルをコピーしてもプログラムが壊れないように、ソリューションを移植可能にしたいと思います。(申し訳ありませんが、これを先に言及するのを忘れてください。)

4

4 に答える 4

5

設定/設定を Java に保存する最良の方法は、設定 APIを使用することです。

于 2013-07-11T12:12:37.060 に答える
2

YAMLを使用して構成を定義することを検討してください。XML に比べてはるかに冗長ではありません。次に例を示します。

games:
  - name: 'game 1'
    players: ['Bob', 'Alice']
    ...
  - name: 'game 2'
    players: ['Bob', 'Alice']
    ...

次に、JacksonライブラリとYAML 拡張機能を使用して、構成を解析するなど、構成を操作できます。

File configFile = new File("...");
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Configuration config = mapper.readValue(configFile, Configuration.class);
于 2013-07-11T13:22:39.157 に答える
2

XML ファイルを作成するには、自動マーシャラーを使用する必要があります。数年前、私はCastorXMLを使用していましたが、今日ではおそらくその目的のための最新の API が存在します。

この API を使用すると、基本的に次のことができます。

  • すべての設定を単純な POJO に保存します
  • マーシャラーをインスタンス化する
  • marshaller.write(MyConfig) を呼び出す

構成をロードする場合:

  • Unmarshaller をインスタンス化する
  • Marshaller.read(yourFile) を呼び出します

構成ファイルに XML マッピングを記述するか、デフォルトの Marshaller (1 属性 ~ 1 XML タグ) を使用できます。

それはとても簡単です。

編集:

このスレッドで検索した結果、CastorXML の最初のリリース後に JAXB 仕様が作成され、Sun による JAXB の実装がJava <-> XMLマッピングの標準になっているようです。

于 2013-07-11T12:08:15.083 に答える
1

Apache Commons Configurationを確認してください。

階層構成を適切にサポートします。

XMLConfiguration config = new XMLConfiguration("games.xml");
String gameName = config.getString("game1.name");
List<Object> playerNames = config.getList("game1.players.player.name");
// ...
config.setProperty("game1.name", "Space Invaders"); // update game name
config.addProperty("game1.players.player(-1).name", "ted"); // add new players
config.addProperty("game1.players.player(-1).name", "carol"); 
config.clearTree("game1.players.player(1)"); // remove a player

// Or with XPath 
config.setExpressionEngine(new XPathExpressionEngine());
config.addProperty("game1/players player/name", "ted"); 
config.addProperty("game1/players player/name", "carol"); 
config.clearTree("game1/players/player[2]");
于 2013-07-11T12:23:07.070 に答える