2011-01-02 9 views
3

明らかに、パスなどをアプリケーションにハードコーディングしないようにしたいので、結果として、文字列などの単純なものを格納する設定ファイルを作成したいと思います。これを行う最も簡単な方法は何ですか?私は、ココアがオブジェクトの永続性をどのように使用するのかを考えていましたが、同等のものは見つけられません。Javaで設定ファイルを実行する最も簡単な方法は何ですか?

答えて

0

これはWebベースのアプリケーションの場合、これらをアプリケーションサーバーのコンソール/ファイル内の環境変数(またはカスタムプロパティ)の一部として追加できます。

スタンドアロンアプリケーションの場合は、単純なプロパティファイルで十分です。

8

あなたが言った事実に基づいて、

私は例外処理をしなかったことに留意してください。あなたはストリームのためにそれをする必要があります。

// Save Settings 
    Properties saveProps = new Properties(); 
    saveProps.setProperty("path1", "/somethingpath1"); 
    saveProps.setProperty("path2", "/somethingpath2"); 
    saveProps.storeToXML(new FileOutputStream("settings.xml"), ""); 

    // Load Settings 
    Properties loadProps = new Properties(); 
    loadProps.loadFromXML(new FileInputStream("settings.xml")); 
    String path1 = loadProps.getProperty("path1"); 
    String path2 = loadProps.getProperty("path2"); 
0

Webアプリケーションを構築する場合は、Spring 3.0を使用してください。 Beanは、web.xmlファイルとDispatcher-servlet.xmlファイルで定義できます。

一般に、JettyやTomcatなどのWebコンテナでは、環境変数を定義できます。これには、WARファイルを再コンパイルまたは再構築することなく、これらの変数をサーバー間で変更できるという利点があります。

私は通常、この方法を使用して、開発サーバーからステージングサーバーおよび運用サーバーに展開できます。コードやWARファイルを絶えず盗む必要はありません。

0

基本オブジェクトのシリアライズを検討し、結果をファイルに書き込んだことはありますか?プリファレンスオブジェクトのグラフ全体でシリアライズ可能な設定を実装している限り、問題なくシリアライズできます。

プロパティファイルは良好ですが、バイナリデータまたは永続性については柔軟性がありません。

+0

私は通常このことを考えていますが、私がしたいのは、文字列の設定を保存することだから、プロパティは良い選択のようです。 – Alex

+0

ああ、あなたがココアとの比較を開始したとき、私は一般化しました:-) –

3

これは、アプリケーションを構成する方法と、アプリケーションを構成する予定のある人によって異なります。システムのネイティブ設定メカニズム(たとえば、Mac OS Xの〜/ Library、gnomeのgconf、WindowsのシステムレジストリのPLISTファイル)を使用する場合は、java.util.prefs.Preferencesが設定/環境設定を扱う簡単で正確な方法です。これらの設定のデフォルト値だけでなく、キーの名前付き定数を使用してプリファレンスの上に独自のクラスを作成し、おそらくそれらを取得するためのヘルパーメソッドを作成したいと思うでしょう。ここではそれを使用する方法の例です:Preferencesクラスは、あなたのプラットフォーム間でアプリケーションを構成するための単一の方法を与えることはありません、それは必ずしもあなたの設定ファイルを与えるものではありません、と述べた

// Class to wrap some settings 
public class AnimationSettings { 
    private static final String VELOCITY_KEY = "velocity"; 
    private static final double VELOCITY_DEFAULT = 5.0; 

    public static double getVelocity() { 
     return getPrefs().getDouble(VELOCITY_KEY, VELOCITY_DEFAULT); 
    } 

    public static void setVelocity(int velocity) { 
     getPrefs().putDouble(VELOCITY_KEY, velocity); 
    } 

    public static void sync() { 
     getPrefs().sync(); 
    } 

    private static Preferences getPrefs() { 
     if (preferences_ == null) { 
      preferences_ = Preferences.userNodeForPackage(AnimationSettings.class); 
     } 
     return preferences_; 
    } 

    private static Preferences preferences_ = null; 
}; 

// Elsewhere in the application: 
//... 
double velocity = AnimationSettings.getVelocity(); 
// ... 

。そのために、XML/* .propertiesファイルも、他の回答者の一部が示唆しているような解決策です。しかし、XMLやプロパティファイルを使うことの欠点は、どこに行くべきか、どのように見ていくか、複数のファイルを他のものに置き換える(システム設定やユーザ設定など)必要があるかどうか、 、ファイルが存在しない場合の対処方法などがあります。これらの種類の設定はうまく処理されます。

+1

+1これはクロスプラットフォームでの最適な選択です。 – trashgod

1

これには一般に2通りの方法があります。 1つの言語固有のものと1つの一般的なもの。 設定を保存する一般的な方法は、Propertiesクラスで読み取ることができるプロパティファイルです。 thisをご覧ください。

プロパティを格納する言語固有の方法は、各言語のプロパティファイルとフォールバック目的のデフォルトのプロパティファイルを持つことです。これらは、Resourceクラスを使用してロケールを提供することで読むことができます。 thisをご覧ください。

関連する問題