2016-08-10 8 views
-3

私はJavaを初めて使い、FileReader/FileWriterに慣れ親しんでいるが、なぜこの第1回try/catchが動作しないのか、第2回try /キャッチは?Java FileReaderキャッチプレースメントを試す

try{ 
    FileWriter filewriter = new FileWriter(filepath); 
    filewriter.write(json.toString()); 
    saved = true; 
} catch (IOException ex) { 
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex); 
} 

が、それはのtry/catchにするのではなく、そこにそれを置く作るんどのような違い

try(FileWriter filewriter = new FileWriter(filepath)){ 
    filewriter.write(json.toString()); 
    saved = true; 
} catch (IOException ex) { 
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex); 
} 

を動作します動作しませんか?

ありがとうございました。

+0

「うまくいかない」とはどういう意味ですか?エラーメッセージが表示されますか?はいの場合は、正確なエラーメッセージは何ですか?それはコンパイルされますが、実行するときに期待した以外の何かをしますか?はいの場合は、正確に何を期待しましたか? – Jesper

+0

プログラムを実行したときに最初にエラーが発生しない場合は、 –

+0

私はそれをうまくやっていますが、何もファイルに書き込まれていないことを意味していますか? – Parody

答えて

2

最初の例では例外が検出されますが、リソースは解放されません。あなたは、finallyブロックで.close()関数を呼び出しを経由して手動で閉じる必要があり :https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html#close()

あなたはここで読むことができますとして第二の例は、「リソースとしてみてください」と呼ばれている:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html - >それは自動的に呼び出します.close()関数はあなたのために、リソースリークを心配する必要はありません。

キャッチブロックによる例外処理は、両方の例で同じです。

関連する問題