我正在练习从文件中读取文本而无法理解我做错了什么。这就是我最初的想法:
public class Main {
public static void main(String[] args){
File f = new File("C:\\test\\est.txt");
Scanner in = new Scanner(f);
while (in.hasNext()){
System.out.println(in.next());
}
}
}
编译器说:未处理的异常java.io.fileNotFoundException。 所以我尝试了这个:
File f = new File("C:\\test\\est.txt");
Scanner in = new Scanner(f);
try{
while (in.hasNext()){
System.out.println(in.next());
}
}catch (IOException i){
System.out.println(i.getMessage());
}
现在编译器说:未处理的异常java.io.fileNotFoundException。而且:java.io.fileNotFoundException永远不会在相应的try块中抛出。
然后我尝试了这个:
File f = new File("C:\\test\\est.txt");
Scanner in = new Scanner(f);
try{
while (in.hasNext()){
System.out.println(in.next());
}
}catch (IOException i){
throw new IOException(i.getMessage());
}
然而它仍然说:未处理的异常java.io.fileNotFoundException!
任何人都可以解释我做错了什么吗?我如何能够以与我的尝试类似的方式阅读文件中的所有文本。
**注意我的文件存在。
答案 0 :(得分:4)
未处理的异常意味着它可能会被抛出代码中的某个位置,但是当您明确不得不这样做时,您不会将其考虑在内。所以要修复,将其包装在try-catch中:
File f = new File("C:\\test\\est.txt");
try
{
Scanner in = new Scanner(f);
while (in.hasNext()){
System.out.println(in.next());
}
}catch (IOException i){
e.printStackTrace();
}
请注意,扫描仪也位于try块内。您的尝试很好,但Scanner构造函数也可能抛出FileNotFoundException。为了在将来解决这些问题,编译器会准确地告诉您抛出异常的行,而不是处理它。
答案 1 :(得分:1)
您需要通过以下方式处理FileNotFoundException
:
throws FileNotFoundException
在您的方法标题中。或者添加一个catch语句:
}catch (FileNotFoundException ex){
//log it or handle it
}
另外,避免在catch中抛出相同的异常:
throw new IOException(i.getMessage());
所以你想要这样的东西:
try{
File f = new File("C:\\test\\est.txt");
Scanner in = new Scanner(f);
while (in.hasNext()){
System.out.println(in.next());
}
}catch (FileNotFoundException ex){
//log it or handle it
}catch (IOException i){
//throw new IOException(i.getMessage());
//log it or handle it
}
好的,但现在编译器打印出java.io.FileNotFoundException: C:\ Users \ Cristian \ Desktop(访问被拒绝)。为什么“拒绝访问?”
确保您具有该目录的读取权限。尝试以管理员身份运行IDE(可以通过右键单击IDE并单击“以管理员身份运行”来执行此操作)。
答案 2 :(得分:1)
错误告诉你问题是什么;-) 您正在处理IOException,但不处理FileNotFoundException!
试试这样:
File f = new File("C:\\test\\est.txt");
Scanner in = null;
try {
in = new Scanner(f);
} catch (IOException i){
i.printStackTrace();
}
while (in != null && in.hasNext()){
System.out.println(in.next());
}
编辑:确实FileNotFoundException
延伸IOException
,所以你不需要单独处理它:)