2016-12-09 10 views
0

入力ファイルを読み込んで出力ファイルを作成するコードを記述しようとしていました。しかし、正しい入力ファイル名が入力されるまで試してみると、問題がありました。 FileNotFoundExceptionを投げることがありますtryブロックには方法がありませんjavaは、filenotfoundexceptionがなくなるまで試し続けます。

public static void main(String[] args) throws FileNotFoundException 
{ 

      //prompt for the input file name 
      Scanner in = new Scanner(System.in); 
      //keep trying until there are no more exceptions 
      //boolean done = false; 
      String inputfilename = " "; 
      while (!done) 
      { 
      try 
      { 
       System.out.print("Input file name (from your computer): "); 
       inputfilename = in.next(); 
       done = true; 
      } 
      catch (FileNotFoundException exception) 
      { 
       System.out.println("****** ERROR ******\nCannot locate the input file '" + inputfilename + "' on your computer - please try again."); 
      } 
      } 
      //prompt for the output file name 
      System.out.print("What would you like to call your output file: "); 
      //use outputfilename variable to hold input value; 
      String outputfilename = in.next(); 
      //construct the Scanner and PrintWriter objects for reading and writing 
      File inputfile = new File(inputfilename); 
      Scanner infile = new Scanner(inputfile); 
      PrintWriter out = new PrintWriter(outputfilename); 
      //read the input and write the output 
      out.println("Here is the class average for mstu4031:\n"); 
      double totalgrade = 0; 
      double number = 0; 
      while (infile.hasNextDouble()) 
      { 
      double grade = infile.nextDouble(); 
      out.println("\n"); 
      out.printf("%.1f\n",grade); 
      number++; 
      totalgrade = totalgrade + grade; 
      } 
      //print numbers and average in output file 
      out.println("\n\n"); 
      out.printf("\nNumber of grades: %.1f",number); 
      //calculate average 
      double average = totalgrade/number; 
      out.println("\n\n"); 
      out.printf("\nAverage: %.2f",average); 

      finally 
      {  
      in.close(); 
      out.close(); 
      } 
} 
+0

'私は問題を抱えているが、それが適切にFileNotFound例外がtry'にあるではない示しています。その意味を説明できますか? – YoungSpice

+0

入手した特定のエラーメッセージを追加してください。 – Tophandour

+0

あなたのコードでは、変数 'done'の宣言がコメントアウトされているので、あなたのコードはコンパイルされませんが、それは誤植であると思います。 – aleb2000

答えて

1

それは....ない、適切にFileNotFound例外が試みであることを示しています。

tryブロックでスキャナのインスタンスを作成してください。間違った

String inputfilename = null; 
Scanner infile = null; 
while (!done) 
{ 
    try 
    { 
    System.out.print("Input file name (from your computer): "); 
    inputfilename = in.next(); 
    infile = new Scanner(new File(inputfilename)); 
    done = true; 
    } 
    catch (FileNotFoundException exception) 
    { 
    System.out.println("****** ERROR ******\nCannot locate the input file '" + inputfilename + "' on your computer - please try again."); 
    } 
} 
+0

ありがとうsooooo、それは動作します! – maymay

0

をここに:標準入力から読み込み、ファイル名が存在しない場合は期待FileNotFoundExceptionをスローします。ファイルが実際に存在するかどうかを確認せずに入力を受け取るだけです。すべての有効な入力により、ループから抜け出すことができます。

 if(new File(inputfilename).exist()){ 
      done = true; 
     }else{ 
      System.out.println("****** ERROR ******\nCannot locate the input file '" + inputfilename + "' on your computer - please try again."); 
     } 
0

tryブロックの中で何かが例外をスローする可能性がある場合にのみ、例外をキャッチすることができます。

ただし、例外をキャッチする代わりにFile.exists()というファイルが存在するかどうかをテストする必要があります。

File file; 
do { 
    System.out.print("Input file name (from your computer): "); 
    file = new File(in.next()); 
} while (!file.exists()); 
0

ファイルを開くと、例外がスローされることがあります。だからあなたはそれらをtryブロックの中に置く必要があるのです。あなたが唯一のtry-catchブロック内入力部を読んで、このコードが正常に動作

希望入れている:

//prompt for the input file name 
    Scanner in = new Scanner(System.in); 
    //keep trying until there are no more exceptions 
    //boolean done = false; 
    String inputfilename = " "; 
    while (!done) 
    { 
    try 
    { 
     System.out.print("Input file name (from your computer): "); 
     inputfilename = in.next(); 
     done = true; 
     //prompt for the output file name 
     System.out.print("What would you like to call your output file: "); 
     //use outputfilename variable to hold input value; 
     String outputfilename = in.next(); 
     //construct the Scanner and PrintWriter objects for reading and writing 
     File inputfile = new File(inputfilename); 
     Scanner infile = new Scanner(inputfile); 
     PrintWriter out = new PrintWriter(outputfilename); 
     //read the input and write the output 
     out.println("Here is the class average for mstu4031:\n"); 
     double totalgrade = 0; 
    double number = 0; 
    while (infile.hasNextDouble()) 
    { 
    double grade = infile.nextDouble(); 
    out.println("\n"); 
    out.printf("%.1f\n",grade); 
    number++; 
    totalgrade = totalgrade + grade; 
    } 
    //print numbers and average in output file 
    out.println("\n\n"); 
    out.printf("\nNumber of grades: %.1f",number); 
    //calculate average 
    double average = totalgrade/number; 
    out.println("\n\n"); 
    out.printf("\nAverage: %.2f",average); 
    } 
    catch (FileNotFoundException exception) 
    { 
     System.out.println("****** ERROR ******\nCannot locate the input file '" + inputfilename + "' on your computer - please try again."); 
    } 
    } 
    finally 
    {  
    in.close(); 
    out.close(); 
    } 
関連する問題