我在Mac系统的Java程序中查找文件时遇到一些麻烦。
import java.io.File;
import java.util.Scanner;
import java.net.MalformedURLException;
import java.net.URL;
public class Data{
public static void main(String[] args){
File file = new File("/Users/tianrongzhen/project/test.txt");
Scanner sc = new Scanner(file);
while(sc.hasNextLine()){
System.out.println(sc.nextLine());
}
}
}
在同一目录中,当我键入此命令Javac Data.java时,会出现此错误
我已经在StackOverflow上阅读了多个类似的帖子,但不幸的是,我找不到解决方案。
Data.java:9: error: unreported exception FileNotFoundException; must be caught or declared to be thrown Scanner sc = new Scanner(file);
^
1 error
我尝试设置文件路径,如:
"./test.txt"
"test.txt"
"/text.txt"
但是,仍然会发生相同的错误。
我不知道这是否相关,但是我只能在〜目录中的终端中运行java命令,并且上述所有Java文件也都在〜目录中。
有人有什么建议吗?
您的代码未引发异常。您的错误消息并不意味着抛出FileNotFoundException
。
您有编译时错误。
无论何时打开文件,它都必须像这样:
try {
File file = new File("/Users/tianrongzhen/project/test.txt");
} catch (Exception e) {
// handle exception here
}
或类似这样:
public static void main(String[] args) throws FileNotFoundException {
File file = new File("/Users/tianrongzhen/project/test.txt");
// rest of your code
}
有两种例外:已检查和未检查。
经检查的异常可以认为是编译器发现的异常,并且编译器知道该异常有可能发生,因此您需要捕获或抛出该异常。
例如,打开文件。它有机会失败,并且编译器知道这一点,因此您不得不捕获或抛出可能的IOException
或FileNotFoundException
。
以上两种处理异常的方式之间存在巨大差异。
第一个在内部捕获并处理Exception
,因此调用方不必进行任何异常处理。
第二个抛出Exception
,因此呼叫者需要处理Exception
。
根据您在此处提出的问题,建议您阅读有关异常处理的基础知识。 Here是一种资源,但随时可以探索。