2011-12-07 3 views
1

私は初心者のJavaプログラマです。今はJ2SEとNetBeans 6.9.1を使ってアプリケーションをコーディングしています。Javaプログラムのプロパティをロードする

私が直面している問題は、ローカルファイルシステムのよく知られている場所からシングルトンクラスを使ってプロパティを読み込むことです。私に迷惑をかけることは、throws節を要求しているエラーを取得したり、INSTANCE変数が初期化されている例外をキャッチしたりすることです。誰かが私に助けになるのを助けてください。

ありがとうございます。次のように

コードは次のとおりです。

package cat.oai.atapplications.phot; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.Properties; 

/** 
* 
* @author fdalmau 
*/ 
public class PhotPropertiesManager { 

    private static Properties photProperties; 

    private PhotPropertiesManager() throws FileNotFoundException, IOException { 
     photProperties = LoadProperties(); 
    } 

    public static PhotPropertiesManager getInstance() { 
     return PhotPropertiesManagerHolder.INSTANCE; 
    } 

    public static Properties getPhotProperties() { 
     return PhotPropertiesManager.photProperties; 
    } 

    private static Properties LoadProperties() throws FileNotFoundException, 
                 IOException { 

     Properties defaultPhotProperties = new Properties(); 

     FileInputStream in = new FileInputStream("defaultphot"); 
     defaultPhotProperties.load(in); 
     in.close(); 

     Properties applicationPhotProperties = 
            new Properties(defaultPhotProperties); 

     in = new FileInputStream("lastexecutionphot"); 
     applicationPhotProperties.load(in); 
     in.close(); 

     return applicationPhotProperties; 
    } 

    private static class PhotPropertiesManagerHolder { 

     /****** 
      The problem is is this line of code: 
     ******/ 
     static final PhotPropertiesManager INSTANCE = new PhotPropertiesManager(); 

    } 
} 
+0

あなたは私たちにエラーをお願いできますか?スタックトレースはありますか? –

+1

PhotPropertiesManager()を宣言すると、複数の例外がスローされるため、try catchを要求する可能性が高くなります。 – Max

+0

@Maxあなたはそれを釘付けにしました、Francesc、 "try ... catch"ブロック、リソースhttp://docs.oracle.com/javase/tutorial/essential/exceptions/catch.htmlを使用する必要があります – ComputerSaysNo

答えて

0

問題は、静的フィールドがチェック例外を投げることができないということです。私はこのようなコードを単純化します。

あなたが宣言するときに例外をスローしているので、あなたのコードを使用するために、try-catchブロックを使用する必要が
public enum PhotPropertiesManager {; 
    private static final Properties PHOT_PROPERTIES = new Properties(); 

    static { 
     try { 
      load("defaultphot"); 
      load("lastexecutionphot"); 
     } catch (IOException e) { 
      throw new IllegalStateException(e); 
     } 
    } 

    private static void load(String filename) throws IOException { 
     FileInputStream in = new FileInputStream(filename); 
     PHOT_PROPERTIES.load(in); 
     in.close(); 
    } 

    public static Properties getPhotProperties() { 
     return PHOT_PROPERTIES; 
    } 
} 
+1

両方の応答はとても役に立ちました。それにもかかわらず、Peter Lawreyが投稿したものを選ぶことにします。なぜなら、それはよりよく、よりコンパクトであると感じるからです。 –

+0

「もっとよくコンパクト」は私の個人的な探求です。 ;)それを受け入れるために、左に好きな答えをチェックすることができます。 –

0

PhotPropertiesManager() 

のJavaを使用すると、基本的にあなたのプログラムが勝っていることを確認してみますプログラムが遭遇する可能性のあるエラーを「キャッチ」し、それに応じてそれらのエラーを処理することによって、クラッシュする(少なくとも完全に)。

あなたのtry-catchは、次のようになります。ドリンの

try{ 
PhotPropertiesManager(); 
} 
catch(Exception e){ 
whateveryouwanttodo(); 
} 

もっとドキュメントの礼儀を、 [try-catch]

関連する問題