简体   繁体   中英

Try/Catch For File Not Found Exception Nested inside a While Loop

I'm trying to code for a file not found exception in a while loop so that the program continues prompting the user for the file (test.txt). I wrote a try/catch block inside a while loop. However, when I delete the input file (test.txt), the program should catch this error and print "Error, cannot locate the 'test.txt' file, please try again:" and allow the user to input another file name. However, the program crashes and gives me a FileNotFoundException.

In your code, two lines raise FileNotFoundException s that you are not catching:

// scanner and printwriter objects for reading text file
Scanner in = new Scanner(correctInputfile);
PrintWriter out = new PrintWriter(outputName);
// read input (values) and write the output (average)

You can replace them with the following, and the code (should) work.

Scanner in = null;// Initialize to null, so they don't raise warnings.
PrintWriter out = null;
try { // Surround with try/catch to get the exception
    in = new Scanner(correctInputfile);
    out = new PrintWriter(outputName);
}catch(FileNotFoundException e){
    /*TODO: something about the exception here!
      Make sure the Scanner and PrintWriter get 
      properly initialized with valid file names.*/
}

In this case it's probably better to ask for permission rather than forgiveness (eg check if the file exists before attempting to read it).

File file = new File("test_input.txt");
if (file.exists()) {
    FileReader fileReader = new FileReader(file);
}

You should add another try and catch for the Scanner

// prompt user for name for output textfile
System.out.println();
System.out.print("What would you like to call your output file: ");
String outputName = inputReader.nextLine();
// scanner and printwriter objects for reading text file
try {
    Scanner in = new Scanner(correctInputfile);
    PrintWriter out = new PrintWriter(outputName);
    // read input (values) and write the output (average)

    // messages triggered by successful location of files.
    if (fileName.equalsIgnoreCase(("test_input.txt"))) {
        // code logic
    }
} catch (FileNotFoundException ex) {
    System.out.println();
    System.out.println("***** ERROR *****");
    System.out.println("\nCannot locate the input file " + "'" + fileName + "'" + "on your computer - please try again.");
    System.out.print("\nInput file name (from your computer): ");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM