2017-12-02 10 views
2

.txtファイルから情報を読み取るためにBufferedReaderを宣言しようとしています。私は、次の方法でそれを宣言する:BufferedReaderはcatch-22を入力せずにファイルを開くと宣言できません。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input-file.txt")))); 

を今、私はtry/catchブロックでそれを宣言していない場合は、Javaが文句を言うので、私は、この小さな問題を抱えている - 結局、保証はシステムがありませんinput-fileが見つかるので、IOExceptionをスローする必要があります。しかし、その宣言をtry-catchブロックに置くと、Java ALSOが文句を言う。後で.readLine()メソッドを使ってbrを参照し、brはtry/catchブロックで宣言されているので、BufferedReaderが作成されるという保証はありません。しかし、私がtry/catchブロックからBufferedReaderを取り出して、それが作成されたことを確認しようとすると、IOExceptionをキャッチできません...どうすればこのトラップからエスケープできますか?

+1

あなたが話しているcatch-22は分かりません。私は問題のない前に読者のストリームを作成しました。 catch-22を作成すると思われる正確なコードを投稿できますか、それともできるだけ近くに配置しますか?さもなければ、あなたは実際の問題が何であるかを推測しています。 – yshavit

+1

@yshavitと合意してください...コードを見ずに、正確な問題は何か分かりません。また、「Java complaint」とは言わないでください。 Javaは文句を言っていません。エラーが何であるかについての具体的な情報を提供します。これは私たちと共有する必要があります。 – ajb

答えて

3

あなたは、try-catchブロック内BufferedReaderのから読み取ることができます:

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input-file.txt"))))) { 
    String s = br.readLine(); 
} catch (IOException io) {} 
+0

彼は彼の質問で、彼はtry-catchブロックですでにそれを試したと言った。 – Meepo

+0

彼はBufferedReaderインスタンスを宣言しようとしたが、それは – Ivan

+0

ああ使用しなかった。私の悪い – Meepo

0

あなたが手の前に起こるかもしれない予期しないエラーを処理するために、I/Oリソースとjava compiler力を作業しているとき。これはJavaでchecked exceptionと呼ばれ、回避する方法はありません。あなたがファイルを読みたいのであれば、あなたは次のようにそれを行うことができます。

new FileReader("input-file.txt"); 

あなたはコンパイル時にそれを処理することがFileNotFoundExceptionをスローし、これはchecked exceptionとコンパイラ力でそのようなファイルが存在しない場合。あなたはBufferedReader以内にそれを飾ることができます。コンパイラはFileNotFoundExceptionともIOExceptionを処理するためにあなたを強制します​​

BufferedReader reader = new BufferedReader(new FileReader("input-file.txt")); 

BufferedReaderAutoCloseableインターフェイスを実装して、あなたは以下のようtry-with-resources文でtry以内にそれを宣言することができます。 tryブロックの実行が完了すると、closeメソッドが自動的に呼び出され、そのメソッドはIOExceptionをスローする可能性があります。したがって、完全なバージョンは以下のように見えるかもしれません:

try (BufferedReader reader = new BufferedReader(new FileReader("input-file.txt"))) { 
    // your logic 

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

} catch (IOException e) { 
    e.printStackTrace(); 
} 
関連する問題