4

在 Snow Leopard 上的 Eclipse (Indigo) 上运行以下 Java 6 代码时出现 FileNotFoundException:

import java.io.*;
import java.util.*;

public class readFile {

    public static void main(String[] args) {

        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

    }
}

例外是

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type FileNotFoundException

    at readFile.main(readFile.java:9)

我当前的工作空间是 /Users/daniel/pr/java。它只包含一个项目(readFile),文件层次结构如下所示:

- readFile
    - src
        - (default package)
            - readFile.java
    - JRE System Library [JavaSE-1.6]
    - myfile.txt

在阅读了几个非常相似的问题后,我尝试过

  • 将 myfile.txt 的副本放在项目、bin、src 和工作区目录以及我的主文件夹和根文件夹中
  • 识别工作目录并使用相对路径
  • 通过 Eclipse 中的“运行配置 > 参数 > 工作目录”手动设置工作区
  • 在 bin、readFile、src 和 java 目录中使用命令行 Java 启动器运行程序(在所有这些地方都有 myfile.txt 的副本)
  • 删除文件扩展名和/或延长文件名(超过一些假定的最小字符限制),和
  • 验证 myfile.txt 的权限(它们现在是 rw-r--r--)。

我不知所措。可能是什么问题呢?(感谢您的阅读!)

4

3 回答 3

5

异常告诉你问题。

您在 main 中的代码可能会抛出 FileNotFoundException,因此您需要在代码中考虑这一点,或者通过在方法签名中声明可以抛出该异常,或者使用 try catch 包围代码:

声明:

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

    Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

}

或使用 try/catch

public static void main(String[] args) {
    try { 
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
    } catch (FileNotFoundException e) {
        //do something with e, or handle this case
    }
}

这两种方法之间的区别在于,由于这是您的主要方法,因此如果您在方法签名中声明它,您的程序将抛出异​​常并停止,从而为您提供堆栈跟踪。

如果您使用 try/catch,您可以通过记录错误、重试等方式来处理这种情况。

您可能想看看: http ://docs.oracle.com/javase/tutorial/essential/exceptions/以了解 Java 中的异常处理,它会非常有用。

于 2012-05-04T16:52:42.280 回答
4

FileNotFoundException是一个检查异常!您必须捕获异常...

 public static void main(String[] args) {
     try {
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
     } catch(FileNotFoundException ex) {
         //Handle exception code ...
     }
 }
于 2012-05-04T16:51:06.200 回答
2
"/Users/daniel/pr/java/readFile/myfile.txt"

那不应该是:

"/users/daniel/pr/java/readFile/myfile.txt"
于 2012-05-04T16:52:42.750 回答