使用Java在Eclipse中创建Scanner时出现FileNotFoundException

时间:2012-05-04 16:48:53

标签: java eclipse java.util.scanner filenotfoundexception filereader

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

我很茫然。可能是什么问题呢? (感谢您阅读!)

3 个答案:

答案 0 :(得分:5)

该例外告诉您问题。

中的代码可能抛出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中的异常处理,它将非常有用。

答案 1 :(得分: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 ...
     }
 }

答案 2 :(得分:2)

"/Users/daniel/pr/java/readFile/myfile.txt"

不应该是:

"/users/daniel/pr/java/readFile/myfile.txt"