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

FileNotFoundException when creating a Scanner in Eclipse with Java

提问人:Daniel Jordan 提问时间:5/5/2012 最后编辑:Daniel Jordan 更新时间:5/5/2012 访问量:18612

问:

在 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--)。

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

eclipse java.util.scanner filenotfoundexception filereader

评论


答:

4赞 aleroot 5/5/2012 #1

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 ...
     }
 }
6赞 pcalcao 5/5/2012 #2

异常会告诉您问题所在。

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
    }
}

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

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

你可能想看一下: http://docs.oracle.com/javase/tutorial/essential/exceptions/ 学习 Java 中的异常处理,它会非常有用。

评论

0赞 NominSim 5/5/2012
第二种方法中的“投掷”是必要的吗?
1赞 pcalcao 5/5/2012
起伏不定!从第一个复制/粘贴...现已修复!谢谢。
2赞 Andrew Thompson 5/5/2012 #3
"/Users/daniel/pr/java/readFile/myfile.txt"

那不应该是:

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

评论

0赞 Daniel Jordan 5/5/2012
用户目录在我的 mac 上是大写的。不过,也许不是在其他人身上。