2011-12-05 4 views
0

私は単純なプログラムを書いていますが、「Javaが好きです」と300回もテキストファイルに書き込みます。メソッドのヘッダを変更せずに試してみたり、例外処理をしたりする

public class PrintLines { 
    public static void main(String[] args) throws Exception{  
     java.io.File file = new java.io.File("myFile.txt"); 
     java.io.PrintWriter output = new java.io.PrintWriter(file);   
     int count = 1; 
     while (count <= 300) { 
      output.println(count + " I love Java!"); 
      count++;   
     } 
     output.close(); 
    } 
} 

私がが不明だ、といくつかのウェブページに把握しようと、私はクラスのために使用するテキスト本は、私はこのコードのtry/catchブロックを行うと、まだファイルを作成するにはどうすればよいですされています?私が言ったように、それは動作しますが、が例外をスローすることなくそれを行わなければなりません。私のような初心者プログラマーの初心者の答えを与えるまともなウェブページを見つけることができません。

+0

http://docs.oracle.com/javase/tutorial/essential/io/charstreams.html IOExceptionを処理できない場合は、メソッドがそれをスローするようにする必要があります。ただし、最終的にブロックを使用してライターを閉じる必要があります。 –

+0

私はあなたのメインが今まで例外をスローするとは思わない。例外を投げるということは、そのメソッドがそれを捕まえなければならないこと、あるいはそれを投げ捨てなければならないことを意味しています。 mainはあなたのエントリーポイントなので、このプログラムではどこにキャッチすることはできません。 –

+0

... UncaughtExceptionHandlerを除いて、デフォルトで 'System.err'に素敵なスタックトレースを出力します。技術的に知名度の高い視聴者を対象としたシンプルなプログラムであれば十分です。 – meriton

答えて

3

コードは次のようになります。 例外はIOExceptionになるはずです。

public class PrintLines { 
    public static void main(String[] args) { 
     java.io.File file; 
     java.io.PrintWriter output = null; 
     try{ 
      file = new java.io.File("myFile.txt"); 
      output = new java.io.PrintWriter(file); 
      int count = 1; 
      while (count <= 300) { 
       output.println(count + " I love Java!"); 
       count++; 

      } 
      output.close(); 
     } catch(*EXCEPTION*) { 
     //Handle Exception 
     } finally { 
      if(output!=null) { 
      output.close(); 
      } 
     } 
    } 
} 
+0

また、FileNotFoundExceptionもあると思います。コードサンプルにリストされている最初のcatchとfinallyブロックの間に別のcatch(FileNotFoundException){}ブロックを追加します。 –

+0

実際にIOExceptionはそれを処理しますが、例外をどのように扱うかをより明確にしたい場合は、それらを分離することができます。 – Rcunn87

+0

ありがとう、私は1つが他から継承されているかどうか、または関係がないかどうか覚えていませんでした。 –

0

それはこのようになります - Javaの例外で

public class PrintLines { 
    public static void main(String[] args){ 
     java.io.File file = new java.io.File("myFile.txt"); 
     java.io.PrintWriter output = null; 
     try { 
      output = new java.io.PrintWriter(file); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     int count = 1; 
     while (count <= 300) { 
      output.println(count + " I love Java!"); 
      count++; 
     } 
     output.close(); 
    } 
} 
+3

NullPointerExceptionが一般にFileNotFoundExceptionに好ましくない:)もちろん – Affe

+0

これはトライキャッチブロックを使用するための一例です。この場合のスロー例外は、FileNotFoundExceptionです。 –

+0

これはtry catch catch;の誤った例です)どこでFileNotFoundExceptionを投げていますか? – mprabhat

0

trycatchブロックで処理されます。あなたのメソッドがExceptionをスローすると述べると、より高いレベルで例外が処理されています。それを処理したい場合は、tryとcatchブロックでコードを記述する必要があります。あなたが捉えることができる例外のタイプは複数あります。

public class PrintLines { 
    public static void main(String[] args) { 
     java.io.File file; 
     java.io.PrintWriter output; 
     try { 
      file = new java.io.File("myFile.txt"); 
      output = new java.io.PrintWriter(file); 
      int count = 1; 
      while (count <= 300) { 
       output.println(count + " I love Java!"); 
       count++; 
      } 
     } catch(FileNotFoundException e) {// If the file does not exist 
      e.printStackTrace();// Prints the error 
     } catch(IOException e) {//any other io error 
      e.printStackTrace();// Prints the error 
     } finally { 
      if(output!=null){ 
       output.close(); 
      } 
     } 
    } 
} 
+0

なぜ出力を2回閉鎖していますか? – mprabhat

+0

私はそれがコンパイルするとは思わない。私はまた、 'catch'と' finally'を混ぜたり、 'null'を避けないことを提案します。 –

+0

私は個人的に自分のコードで最終的に使用することはありませんが、それはOricalチュートリアルでどのように示唆されています。 –

1

Java Tutorialsは、Javaを初めて使用する人を対象としており、これらのことを非常にうまく説明しています。特に、essential classes trailは例外とI/Oを詳細に記述しています。また、I/Oのコード例も正しい例外処理を実証しています。

+0

はい、私はそれらを見ていますが、それは私にそのように意味がありません。私の学習方法は、残念なことに例を挙げて、時にはもう少し説明を必要とします。 – Abraxas

0

コメントが短すぎるため:

public class PrintLines { 
    public static void main(String[] args) {  
     java.io.File file = new java.io.File("myFile.txt"); 
     try { 
      final java.io.PrintWriter output = new java.io.PrintWriter(file); 
      try { 
       int count = 1; 
       while (count <= 300) { 
        output.println(count + " I love Java!"); 
        count++;   
       } 
      } finally { 
       output.close(); 
      } 
      if (output.checkError()) { 
       System.err.println("Failed to write file correctly."); 
       System.exit(1); 
       return; 
      } 
     } catch (java.io.FileNotFoundException exc) { 
      System.err.println("Failed to write file correctly."); 
      System.exit(1); 
      return; 
     } 
    } 
} 

それは素敵なコードではありません。出力に問題があっても引き続き進んでおり、暗黙には、その時点でどのような文字エンコーディングがデフォルトとして設定されていてもそれを取得します。

// imports elided 

public class PrintLines { 
    public static void main(String[] args) {  
     File file = new File("myFile.txt"); 
     try (OutputStream rawOut = new FileOutputStream{file); 
      BuffereWriter out = new BufferedWriter(new OutputStreamWriter(
       rawOut, java.nio.charset.StandardCharsets.UTF_8 
      )); 
      int count = 1; 
      while (count <= 300) { 
       out.write(count + " I love Java!"); 
       out.newLine(); 
       count++;   
      } 
      out.flush(); 
     } catch (java.io.IOException exc) { 
      System.err.println("Failed to write file correctly."); 
      System.exit(1); 
      return; 
     } 
    } 
}o 

私はJava SE 7の新しいtry文を使用しました。リソースの割り当てと解放によってスローされた例外は、catchブロックにキャッチされ、で表示されるよりもの動作とは逆にの動作であることに注意してください。

関連する問題