尝试将 txt 文件作为 Java 方法的参数传递时出现 FileNotFoundException

-6 java compiler-errors java.util.scanner java-io

全部!我在扫描仪/传递文本文件作为方法的参数时遇到问题。如果我在 main 中创建一个 Scanner,我就可以做所有事情。

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class App {
    public static void main(String[] args){
        File file = new File([FILEPATH]);
        Scanner inputFile = new Scanner(file);
...
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将文本文件传递给方法并在那里创建扫描仪时,我收到 FileNotFoundException

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class App {
    public static void main(String[] args){
        File file = new File([FILEPATH]);
        method(file);
    }

    public static String method(File file){

        Scanner inputFile = new Scanner(file); //This is where I get the error :(
...
Run Code Online (Sandbox Code Playgroud)

问题的提示特意说参数必须是文件,所以我不能改成String参数来传递文件路径。

我使用 .getPath() 来确保我的方法中文件的文件路径与 main 中文件的文件路径匹配,而且确实如此。我不确定需要修复什么。非常感谢任何帮助!

编辑; 添加带有我的完整代码和每个版本的输出的屏幕截图,以便人们可以验证我的更改。

主要:工作版本 方法:非工作版本

Tho*_*ger 5

您仔细阅读错误信息了吗?

它没有说“找不到文件” - 它说:“未解决的编译问题:未处理的异常类型 FileNotFoundException”。

这是因为new Scanner(file)声明抛出 aFileNotFoundException并且您method()必须处理该异常或声明它可能抛出 a FileNotFoundException(通过将其声明为method(File file) throws FileNotFoundException {...}

请注意,将方法声明为method(File file) throws FileNotFoundException {...}委托有义务处理异常或将其声明为向 的调用者抛出的异常method()。这意味着您的main()方法必须要么处理,FileNotFoundException要么您需要将您的main()方法声明为

public static void main(String[] args) throws FileNotFoundException {}
Run Code Online (Sandbox Code Playgroud)

或者

public static void main(String[] args) throws IOException {}
Run Code Online (Sandbox Code Playgroud)

或者

public static void main(String[] args) throws Exception {}`)
Run Code Online (Sandbox Code Playgroud)

为什么编译器不会抱怨版本有效?

这是因为在有效的版本中,您将该main()方法声明为public static void main(String[] args) throws Exception {}- Java 编译器对此感到满意:该声明告诉它在 的体内抛出的任何异常main()都是可接受的。