当前位置: 首页 > 知识库问答 >
问题:

尝试/捕获未找到的文件异常嵌套在当时循环中

黎腾
2023-03-14

我试图在while循环中为“未找到文件”异常编写代码,以便程序继续提示用户输入文件(test.txt)。我在while循环中编写了一个try/catch块。但是,当我删除输入文件(test.txt)时,程序应捕获此错误并打印“error,找不到'test.txt'文件,请重试:”并允许用户输入另一个文件名。然而,该程序崩溃,并给我一个FileNotFoundException。

共有3个答案

史昊焱
2023-03-14

在您的代码中,两行引发您未捕获的FileNotFoundException

// 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)

您可以用下面的代码替换它们,代码应该可以工作。

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.*/
}
锺超英
2023-03-14

您应该为扫描仪添加另一个尝试和捕获

// 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): ");
}
水睿
2023-03-14

在这种情况下,最好是请求许可而不是宽恕(例如,在尝试读取文件之前检查文件是否存在)。

File file = new File("test_input.txt");
if (file.exists()) {
    FileReader fileReader = new FileReader(file);
}
 类似资料:
  • 我希望程序在捕获异常时重新执行 while 循环 - 异常正在接收文本输入。相反,它继续使用下面的代码进行一段时间循环,我希望它再次要求用户输入。 输出:

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 我想捕获一个异常,该异常嵌套在另一个异常中。我目前正在这种方式: 有没有一种方法可以使此操作更高效,更优雅? 问题答案: 没有更优雅的方法来选择性地“捕获”嵌套异常。我想如果您做了很多这样的嵌套异常,就可以将代码重构为通用的实用程序方法。但是它仍然不会优雅或高效。 优雅的解决方案是消除异常嵌套。要么不首先将异常链接起来,要么(有选择地)解开包装并将嵌套的异常重新扔到堆栈的上方。 嵌套异

  • org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为org.hibernate.hibernateException:未找到当前线程的会话org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:973)org

  • 我真的不知道这个问题。。。 如果数字不正确,块将捕获异常,当我输入-1或0时,它将捕获异常并要求我再次输入数字。。。但如果我键入类似asdasd的内容,它将运行一个无限循环。