2016-12-09 3 views
0

Ich habe versucht, Code zu schreiben, der eine Eingabedatei lesen und eine Ausgabedatei erstellen würde. Aber als ich versuchte, einen Versuch hinzuzufügen, bis ein korrekter Eingabedateiname eingegeben wird, hatte ich Probleme. Es zeigt nicht die richtige filenotfound Ausnahme in Versuch ist ....java weiter versuchen, bis es keine filenotfundexception mehr gibt

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

'Ich habe Probleme, es zeigt nicht die richtige filenotfound Ausnahme in try' ist. Kannst du erklären, was das bedeutet? – YoungSpice

+0

Könnten Sie bitte die spezifische Fehlermeldung hinzufügen, die Sie bekommen? – Tophandour

+0

In Ihrem Code ist die Deklaration der Variablen 'done' auskommentiert, daher würde Ihr Code nicht kompiliert werden, aber ich nehme an, das ist ein Tippfehler. – aleb2000

Antwort

1

Es gibt keine Methode in Ihrem try Block ist, der ein FileNotFoundException werfen kann.

Versuchen Sie, Ihren Scanner im try Block instanziieren. Es wird die erwartete FileNotFoundException werfen, wenn der Dateiname von stdin gelesen existiert nicht:

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

Danke sooooo sehr, es funktioniert! – maymay

0

Wrong hier. Sie erhalten nur Eingaben, ohne zu prüfen, ob die Datei tatsächlich existiert. Mit jeder gültigen Eingabe verlassen Sie die Schleife.

 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

Sie können nur eine Ausnahme, wenn etwas in der try Block fangen eine Ausnahme auslösen kann.

Sie sollten jedoch das Vorhandensein einer Datei mit File.exists() testen, anstatt eine Ausnahme abzufangen.

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

Das Öffnen einer Datei kann eine Ausnahme auslösen. Deshalb müssen Sie sie in den Testblock setzen. Sie haben nur das Lesen der Eingabeteil innerhalb Try-catch-Block arbeitet

Hoffnung dieser Code richtig setzen:

//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(); 
    } 
Verwandte Themen