前提・実現したいこと
tryブロックの中に書いていたfr.close();をFinallyブロックの中に移したいのですが、
下記のコンパイルエラーになります。
ソース冒頭のFileWriterクラスで行っているようにtry-with-resourcesという構文なら
そもそもclose()を書かないのでエラーにもなりませんが、
try-with-resources構文ではなくFinallyブロックに記述する方法をとりたいというか
なぜFinallyブロック内に書くとコンパイルエラーになるのか知りたいです。
発生している問題・エラーメッセージ
≪変数名≫を変数に解決できません ≪変数名≫を解決できません
該当のソースコード
Java
1import java.io.File; 2import java.io.FileNotFoundException; 3import java.io.FileReader; 4import java.io.FileWriter; 5import java.io.IOException; 6 7public class streamSample { 8 9 public static void main(String[] args) { 10 11 try(FileWriter fw = new FileWriter("test.txt")){ 12 fw.write("hello!"); 13 } catch (IOException e) { 14 System.out.println("Error."); 15 } 16 17 try { 18 File f = new File("test.txt"); 19 FileReader fr = new FileReader(f); 20 int ch; 21 22 do { 23 ch = fr.read(); 24 System.out.print((char)ch); 25 } while (ch != -1); 26 27// fr.close(); // ここに書く場合はコンパイルエラー発生せず。 28 } catch (FileNotFoundException e) { 29 e.printStackTrace(); 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } finally { 33 try { 34 if (fr != null) fr.close(); // ここに書くとコンパイルエラー 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 } 39 } 40} 41 42
試したこと
BufferReaderクラスなどでも同様にtryブロックでは問題ないが
Finallyブロック内に書くとコンパイルエラーになってしまう。
補足情報(FW/ツールのバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.2 Release (4.7.2)
Build id: 20171218-0600
上記Ver.のEclipseで作成しました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/09 13:59 編集