2011-12-26 1 views
1

次のコードを実行してテキストファイルから読み込みます。私はかなり新しいJavaになっており、自分でプロジェクトを作成しようと試みています。次のコードは、テキストファイルを試してみるために私が最初に見つけたものから少し変更されていますが、何らかの理由で毎回例外をキャッチしています。読み込もうとしているテキストファイルは「hello world」としか書かれていません。私はそれがテキストファイルを見つけてはならないと仮定します。私はソースコードと同じフォルダに入れて、ソースパッケージに表示されます(私はnetbeans btwを使用しています)。おそらくちょうど異なって輸入する必要がありますが、私はそれについてのさらなる情報を見つけることができません。私のコードがここに関連する場合、それは以下の通りです。例外をキャッチする理由

package stats.practice; 

import java.io.*; 
import java.util.Scanner; 

public final class TextCompare { 

    String NewString; 

    public static void main() { 
     try { 
      BufferedReader in = new BufferedReader(new FileReader("hello.txt")); 
      String str; 
      while ((str = in.readLine()) != null) { 
       System.out.println(str); 
      } 
      in.close(); 
     } catch (IOException e) { 
     } 
     System.out.println("Error"); 
    } 
} 

答えて

2

まずステップ、

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

とコード

catch (IOException e){} 

下に交換しても

main(String[] args) 

main() 

を交換210

これはあなたに正確な理由を教えてくれます。実際の理由を解決しなければなりません。

Netbeansの場合、ファイルhello.txtはNetbeansプロジェクトに含まれている必要があります。 like

<project_dir> 
    | 
    -->hello.txt 
    -->build 
    -->src 
+0

ありがとうございます。テキストファイルの場所を置き換えるだけで済みました。 – Zombian

3

毎回必ず例外をキャッチしているわけではありません。 System.out.println("Error");ステートメントはキャッチブロックの外側にあります。したがって、プログラムが実行されるたびに実行されます。この問題を解決するには

catchブロックで閉じ括弧は見当違いであり、括弧内(catch (IOException e) {System.out.println("Error");}

7

それを移動させます。それをSystem.out.println("Error");の下に移動します。あなたは、Java 7を使用している場合

public static void main(String[] args) { 
    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader("hello.txt")); 
     String str; 
     while ((str = in.readLine()) != null) { 
      System.out.println(str); 
     } 
     in.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (Exception e) {} 
     } 

     // or if you're using Google Guava, it's much cleaner: 
     Closeables.closeQuietly(in); 
    } 
} 

、あなたはを活用することができます:あなたは常にfinallyブロックで近いリソースべきで守備のプログラミング(少なくとも前のJava 7)の問題として

public static void main(String[] args) { 
    try { 
     BufferedReader in = new BufferedReader(new FileReader("hello.txt")); 
     String str; 
     while ((str = in.readLine()) != null) { 
      System.out.println(str); 
     } 
     in.close(); 
    } catch (IOException e) { // <-- from here 
     System.out.println("Error"); 
     // or even better 
     e.printStackTrace(); 
    } // <-- to here 
} 

try-with-resourcesを経由して自動リソース管理:

public static void main(String[] args) { 
    try (BufferedReader in = new BufferedReader(new FileReader("hello.txt"))) { 
     String str; 
     while ((str = in.readLine()) != null) { 
      System.out.println(str); 
     } 
     in.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

はい、問題が何であるかを確認できるように、エラーよりも優れたものを印刷する必要があります。 –

+0

確かに、編集済み... –

+0

+1は、あなたは速いです! –

1

あなたはほとんど常に悪い考えである空のcatchブロックを持っています。

... catch (IOException ex) { 
    ex.printStackTrace(); 
} 

あなたはすぐに何が起こっているかを確認する必要があります。

関連する問題