2017-06-09 3 views
-1

未報告例外java.io.FileNotFoundException。キャッチされるか、スローされると宣言された である必要がありますJavaの静的誤差のPrintStream

私はスクリプトを生成するための基本的なプログラムを書いています。それはそれはキャッチまたはスローするように私に尋ね、実行されません私は、ファイルに書き込むために2つのメソッドを使用していますので、私は、ユーザーに静的レベルのファイルをしようと思いましたし、

static String fileName = "R1"; 
static File inputFile = new File(fileName+".txt"); 
static PrintStream write = new PrintStream(fileName+"_script.txt"); 

` をprintstream.` 。クラスレベルでtry-catch節を追加する必要がありますか?これは可能ですか?

+1

あなたはのtry/catchを含む静的初期化子ブロックであなたの変数を初期化することができます。たとえば、この例外を投げることができる方法を作成することができます。 – khelwood

答えて

3

PrintStreamコンストラクタが例外をスローしていますが、それを処理することはできません。

static PrintStream write = new PrintStream(fileName + "_script.txt"); 

ので、あなたのオプションは次のとおりです。

は、静的なブロックを定義する

static String fileName = "R1"; 
static File inputFile = new File(fileName + ".txt"); 
static { 
    try { 
     PrintStream write = new PrintStream(fileName + "_script.txt"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

またはより良いこれらのオブジェクトを初期化するために、静的なメソッドを定義してみてください。

static String fileName; 
static File inputFile; 
static PrintStream write; 

public static void init() throws FileNotFoundException { 
    fileName = "R1"; 
    inputFile = new File(fileName + ".txt"); 
    write = new PrintStream(fileName + "_script.txt"); 
} 
+0

これらの静的変数は決して変化しないようですが、その場合はfinalとして宣言する必要があります。しかし、 'init()'を使うと、それらを最終的に持つことはできません。 –

+0

@KlitosKyriacou私たちは、その背後にあるアイデアが定数としてそれらを使用している場合OPに尋ねなければなりません..あなたは正しいものです最終的にする必要があります....フィードバックありがとう! –

+1

あなたの最初のオプションでは、 'write'は静的ブロック内のローカル変数の代わりに静的フィールドとして宣言されるべきだと思います。そうでなければ、それを持っている点はありません。 – khelwood

0

することができます」あなたがcにする必要があるので、それは例外をスローする必要があるので、tはPrintStreamのように初期化するatchこの例外は、どうですか?あなたとあなたの例外をキャッチすることができ

static String fileName; 
static File inputFile; 
static PrintStream write; 

public static void init() throws FileNotFoundException { 
//------------------^^-------^^ 
    fileName = "R1"; 
    inputFile = new File(fileName + ".txt"); 
    write = new PrintStream(fileName + "_script.txt"); 
} 

あるいは:

public static void init() { 
    fileName = "R1"; 
    inputFile = new File(fileName + ".txt"); 
    try { 
     write = new PrintStream(fileName + "_script.txt"); 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
}