1

下面的代码片段会导致此错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Unhandled exception type FileNotFoundException
String path = "/Users/jfaig/Documents/workspace/my_array/";
BufferedReader in = new BufferedReader(new FileReader(path + "Matrix.txt"));

该路径是有效的,因为我可以看到使用以下代码列出的文件:

File dir = new File(path);
String[] chld = dir.list();
if(chld == null){
    System.out.println("Specified directory does not exist or is not a directory.");
    System.exit(0);
} else {
    for(int i = 0; i < chld.length; i++){
        String fileName = chld[i];
        System.out.println(fileName);
    }
}   

我查看了许多关于 Java 中 OS/X 路径的文章,但没有一篇能解决我的问题。我将在 Windows PC 上尝试一下,看看问题是否特定于 OS/X 和/或我安装的 Eclipse。

4

4 回答 4

6

FileNotFoundException 是检查异常,需要处理。它与文件或路径无关。

http://www.hostitwise.com/java/java_io.html

于 2012-10-19T20:06:42.170 回答
3

它不是抱怨您的文件,而是要求您在找不到文件时进行处理。

如果您不希望对此场景进行任何处理,请使用throws FileNotFoundException例如 formain方法更新您的方法签名,您可以编写如下:

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

如果要处理异常,或者将上面的代码包装在一个try{}catch(FileNotFoundException fnfe){}块中,如下所示:

try{
   File dir = new File(path);
   String[] chld = dir.list();
   if(chld == null){
   System.out.println("Specified directory does not exist or is not a directory.");
    System.exit(0);
   } else {
    for(int i = 0; i < chld.length; i++){
      String fileName = chld[i];
      System.out.println(fileName);
    }
   }   
  }catch(FileNotFoundException fnfe){  
    //log error
    /System.out.println("File not found");
 }          
于 2012-10-19T20:12:16.020 回答
0

java.lang.Error: Unresolved compilation problem:表示真正的错误在 的输出期间列出javac,但它在这里为您重复。Unhandled exception type FileNotFoundException— Java 中的异常必须被显式捕获或重新抛出。

于 2012-10-19T20:11:02.040 回答
0

让 Java 用路径做文件分隔符,并使用带两个参数的 File 构造函数。

 File path = new File("/Users/jfaig/Documents/workspace/my_array");
 File file = new File(path, "Matrix.txt");
 System.out.println("file exists=" + file.exists()); // debug
 BufferedReader in = new BufferedReader(new FileReader(file));

如前所述,您需要捕获或让方法抛出 IOException。

于 2012-10-19T20:18:50.543 回答