FileNotFoundException 尝试在 Java 中将 txt 文件作为方法的参数传递时 [已关闭]

FileNotFoundException when trying to pass txt file as parameter for method in Java [closed]

提问人:ant 提问时间:11/2/2023 最后编辑:user207421ant 更新时间:11/2/2023 访问量:90

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

22天前关闭。

都!我在扫描程序/传递文本文件作为方法的参数时遇到了问题。如果我在main中创建一个扫描仪,我可以做得很好。

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);
...

但是,当我尝试将文本文件传递给方法并在那里创建 Scanner 时,我得到一个 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 :(
...

问题的提示特别指出该参数必须是文件,因此我无法将其更改为 String 参数来传递文件路径。

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

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

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

编译器错误 java.util.scanner java-io

评论

0赞 Owais Yosuf 11/2/2023
验证您尝试打开的文件是否确实存在于指定路径中。如果文件不存在,则会收到 FileNotFoundException。
0赞 tgdavies 11/2/2023
您需要将异常的完整堆栈跟踪添加到您的问题中。
1赞 user207421 11/2/2023
难以置信。实际上,这是不可能的。您更改了其他内容以及代码。
2赞 Thomas Kläger 11/2/2023
在调用方法之前添加一次,在创建 .这将帮助您诊断问题。System.out.println(file.getAbsolutePath()+" "+file.exists());main()Scanner
5赞 Rifat Rubayatul Islam 11/2/2023
您的屏幕截图显示您有编译错误。您尚未处理 .将其包装在内部或添加到方法声明中。FileNotFoundExceptionScannertry-catchthrows

答:

5赞 Thomas Kläger 11/2/2023 #1

您是否仔细阅读了错误消息?

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

这是因为被声明为抛出 a,而 your 必须处理该异常或声明它可能抛出 a(通过将其声明为new Scanner(file)FileNotFoundExceptionmethod()FileNotFoundExceptionmethod(File file) throws FileNotFoundException {...}

请注意,将方法声明为将处理异常或将其声明为引发的异常的义务委托给 的调用方。这意味着你的方法必须处理 或者你需要将方法声明为method(File file) throws FileNotFoundException {...}method()main()FileNotFoundExceptionmain()

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

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

public static void main(String[] args) throws Exception {}`)

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

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

评论

0赞 ant 11/2/2023
但是,代码不应该仍然执行吗?我没有将投掷添加到有效的投掷中,它仍然打印字符串。使用该方法的那个根本不会执行,即使在添加抛出之后也是如此。i.stack.imgur.com/NmThe.png
0赞 Thomas Kläger 11/2/2023
@ant我已经更新了我的答案,其中包含有关您需要如何更改主要方法以及为什么在有效的版本中它确实有效的信息。
0赞 user207421 11/2/2023
@ant 不,它不应该执行,它没有执行,你应该在尝试之前修复编译错误,并且当你这样做时,你应该注意到相当有说服力的短语“未解决的编译问题”。
2赞 Bibek Khadka 11/2/2023 #2

您没有收到 FileNotFoundException,您只是有一个未经处理的已检查异常。您应该使用 try-catch 块或抛出来处理要编译的代码的异常。

评论

0赞 ant 11/2/2023
我添加了抛出 FileNotFoundException,但被告知我仍然有未处理的异常类型?i.stack.imgur.com/NmThe.png
0赞 Bibek Khadka 11/2/2023
“throws”只是将异常处理责任传播到调用类。现在,您必须处理主类中的异常。try{ decode(file); } catch(FileNotFoundException ex){ }
0赞 user207421 11/2/2023
方法中。很难相信这段代码曾经被编译过。实际上,这是不可能的。main()