2017-10-27 11 views
0

FileNotFoundExcpetionに関する質問があります。私が持っているインターフェイスは、「throws FileNotFoundExcpetion」を含むメソッド名を定義しています。FileWriterでtry catchを使用する

public static void writeAssignment(ArrayList<String> assignment, String filename) throws FileNotFoundException { 

    try { 
     FileWriter writer = new FileWriter(filename); 
     for (String str : assignment) { 
      writer.write(str + "\n"); 
     } 
     writer.close(); 

    } catch (IOException e) { 
     System.err.print("Something went wrong"); 
    } 
} 

これは例外を処理する正しい方法ですか?私がファイルライターで作成しているファイルに書き込んでいるときに、メソッドでファイルを作成していると、ファイルが見つからない可能性がありますか?

+0

あなたの関数は決して 'FileNotFoundException'をスローしません。あなたはそれをキャッチしているので、' throws FileNotFoundException'として宣言するのは意味がありません。 – tkausl

+0

'FileNotFoundException'は少し誤解を招く名前です。ここでは、ファイルを作成できなかったときにスローされます。その答えは、FileNotFoundExceptionが実際にはIOExceptionであるため、単純にIOExceptionをスローする必要があることに言及します。それを呼び出し側に任せて、何か破壊的なものを処理してください。 –

+0

私は間違っているかもしれませんが、提供されたパスが存在しないシナリオはどうですか?例 'E:\ abc'がありますが、Eドライブがシステムにマウントされていませんか? – CKing

答えて

1

IOExceptionは、FileNotFoundExceptionのスーパークラスです。したがって、IOExceptionのキャッチブロックにはすべてFileNotFoundExceptionがキャッチされます。次のように

あなたは機能を実装する必要があります。

public static void writeAssignment(ArrayList<String> assignment, String filename) throws FileNotFoundException { 

    try (FileWriter writer = new FileWriter(filename)) { 
     for (String str : assignment) { 
      writer.write(str + "\n"); 
     } 
    } catch (FileNotFoundException e) { 
     throw e; // catch and re-throw 
    } catch (IOException e) { 
     System.err.print("Something went wrong"); 
    } 
} 
-1

あなたは、あなたが例外の階層を学ぶ/見ることができるこのタイプのコーディングからではなく

public static void writeAssignment(ArrayList<String> assignment, String filename) throws FileNotFoundException { 

try { 
    FileWriter writer = new FileWriter(filename); 
    for (String str : assignment) { 
     writer.write(str + "\n"); 
    } 
    writer.close(); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

のIOException

の例外をキャッチすることができます。 例外をキャッチしたかどうかにかかわらずプログラムを実行する場合は、 、最後にブロックを使用できます。あなたの作家をどこに閉じますか。