我应该为我的Java分配的文件操作创建一个示例程序。我很难理解,因为我是C 的家伙。如果有人可以在下面的代码中指出缺陷,那真的很有帮助。我指的是这篇文章。Eclipse给了我" filenotfoundexception的无法到达的捕获块。这个异常永远不会从try语句正文中抛出" 错误。
import java.io.*;
public class file {
public static void main(String[] args) {
String arg1 = args[0];
String arg2 = args[1];
System.out.println(arg1);
System.out.println(arg2);
File f1, f2;
try {
f2 = new File(arg2);
f1 = new File(arg1);
}
catch(FileNotFoundException e) {
/*
if(!f1.exists()) {
System.out.println(arg1 + " does not exist!");
System.exit(0);
}
if(!f2.exists()) {
System.out.println(arg2 + " does not exist!");
System.exit(0);
}
if(f1.isDirectory()) {
System.out.println(arg1 + " is a Directory!");
System.exit(0);
}
if(f2.isDirectory()) {
System.out.println(arg2 + " is a Directory!");
System.exit(0);
}
if(!f1.canRead()) {
System.out.println(arg1 + " is not readable!");
System.exit(0);
}
if(!f2.canRead()) {
System.out.println(arg2 + " is not readable!");
System.exit(0);
}*/
}
}
}
查看您正在调用的File
构造函数的文档。仅例外,它被声明为 NullPointerException
。因此,它不能投掷FileNotFoundException
,这就是为什么您会遇到错误的原因。您无法尝试捕获编译器可以证明的检查的例外,永远不会在相应的try
块中投掷。
创建File
对象没有检查其存在。如果您是打开该文件(例如,使用new FileInputStream(...)
,则可以扔FileNotFoundException
...,而不仅仅是创建File
对象。
这是因为File
类的构造函数
public File(String pathname)
Parameters:pathname - A pathname string Throws: NullPointerException - If the pathname argument is null
Throws: NullPointerException - If the pathname argument is null
仅抛出一个异常,即NullPointerException
。您的代码试图捕获与NullPointerException
无关的FileNotFoundException
,这就是为什么您会在Eclipse中获得此错误的原因。
要走的一种方法是捕获Exception
类的例外,这是Java中所有异常的super
类。另一种方法是捕获调用构造抛出的所有异常(每个 catch
块中的每个异常)(可以通过浏览其API轻松获得)。第三种方法是仅捕获对您的应用程序有意义并忽略其他的例外(实际上是由结构抛出的)。