【问题标题】:Using FileReader causes a compiler error "unhandled exception type FileNotFoundException"使用 FileReader 会导致编译器错误“未处理的异常类型 FileNotFoundException”
【发布时间】:2011-06-27 03:29:49
【问题描述】:

我在这里阅读了一些与相同问题相关的线程,但解决方案不起作用。 :/

我使用 Eclipse,这是我的程序。

package mypackage;
import java.io.*;


public class myclass {


public static void main(String[] args) {
    //String myfile = "/home/jason/workspace/myproject/src/mypackage/myscript.abc";
    String myfile = "src/mypackage/myscript.abc";
    File file1 = new File(myfile);
    if(file1.exists()) {
        log(myfile + " exists. length : " + myfile.length());
    }
    else{
        log(myfile + " does not exist");
        //System.exit(1);
    }

    //FileReader fr = new FileReader("myscript.abc");//I uncomment this and die inside


    System.out.println("\nAbsPath : " + new File(".").getAbsolutePath());
    System.out.println("\nuser.dir : " + System.getProperty("user.dir"));


}

public static void log(String s){
    System.out.println(s);
}

}

无论我尝试什么,或者我把 myscript.abc 放在哪里(它现在遍布整个项目目录),我得到的错误是这样的:

未处理的异常类型 FileNotFoundException myclass.java /myproject/src/mypackage

机智结束,拔毛。

【问题讨论】:

  • 正如许多人所说...只需在行周围使用 try catch 块:FileReader fr = new FileReader("myscript.abc")
  • o man...我将“抛出 FileNotFoundException”添加到 main,完全希望它仍然无法运行,因为嘿,错误仍然存​​在,对吗? (我没有“修复”错误,我现在只是在“捕捉”它。)低,看,它有效。我很困惑。谁能解释一下为什么这(对我来说)现在神奇地起作用的基本规则?
  • 这只是正确的 Java 语法。

标签: java compiler-errors


【解决方案1】:

未处理的异常类型 FileNotFoundException myclass.java /myproject/src/mypackage

这是一个编译器错误。 Eclipse 告诉你你的程序不能编译成 java 字节码(所以你当然不能运行它)。现在,您可以通过简单地声明您的程序可能会抛出此异常来修复它。像这样:

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

FileNotFoundException 是一个“已检查异常”(google this),这意味着代码必须说明遇到 JVM 应该做什么。在代码中,try-catch 块或 throws 声明向 JVM 指示如何处理异常。

为了将来参考,请注意 Eclipse 中的红色波浪下划线表示存在编译器错误。如果您将鼠标悬停在问题上,Eclipse 通常会建议一些非常好的解决方案。在这种情况下,一个建议是“向 main 添加 throws 子句”。

【讨论】:

  • 修复它,但我不明白为什么。在我看来,仍然找不到该文件。为什么抛出异常可以解决这个问题?
  • 您的错误与执行期间是否找到实际文件无关。事实上,你甚至连执行程序都没有。 FileNotFoundException 是“已检查异常”(google this),这意味着您必须说明遇到 Java 应该做什么。
  • "检查异常" - BINGO!!!这是丢失的部分!!!!一千个谢谢!
【解决方案2】:

使用您在创建文件阅读器之前创建并验证的文件描述符。此外,您可能会在使用相对路径时遇到问题。为什么注释掉完整路径的行?无论如何,这里是代码:

if(file1.exists()) {
     log(myfile + " exists. length : " + myfile.length());
     FileReader fr = new FileReader(file1); 
}

【讨论】:

  • 仍然错误,找不到文件,当我这样做时,即使我们强迫它承认事实上文件存在。放入异常抛出代码修复它,但感谢您的努力!
【解决方案3】:

我看到您尝试指定文件的完整路径,但由于以下错误而失败:

你没有声明或试图抓住java.io.FileNotFoundException

要修复它,您可以替换该行

FileReader fr = new FileReader("myscript.abc");

用代码:

try {
    FileReader fr = 
    new FileReader("/home/jason/workspace/myproject/src/mypackage/myscript.abc");
} catch (FileNotFoundException ex) {
    Logger.getLogger(myclass.class.getName()).log(Level.SEVERE, null, ex);
}

以下代码编译成功,应该可以运行:

package mypackage;
import java.io.*;
// It's better to use Camel style name for class name, for example: MyClass.
// In such a way it'll be easier to distinguish class name from variable name.
// This is common practice in Java.
public class myclass {

    public static void main(String[] args) {
        String myfile = 
            "/home/jason/workspace/myproject/src/mypackage/myscript.abc";

        File file1 = new File(myfile);
        if (file1.exists()) {
            log("File " + myfile + " exists. length : " + myfile.length());
        } else {
            log("File " + myfile + " does not exist!");
        }

        try {
            FileReader fr = new FileReader(myfile);
        } catch (FileNotFoundException ex) {
            // Do something with mistake or ignore
            ex.printStackTrace();
        }

        log("\nAbsPath : " + new File(".").getAbsolutePath());
        log("\nuser.dir : " + System.getProperty("user.dir"));
    }

    public static void log(String s) {
        System.out.println(s);
    }
}

【讨论】:

    【解决方案4】:

    您希望 Eclipse 在项目根目录中运行该程序。除非您对“运行”配置做了一些特别的事情,否则如果它真的从那里开始,我会感到惊讶。

    尝试打印出您当前的工作目录以确保这是正确的路径。

    然后尝试验证 bin / build 目录是否包含您的“*.abc”文件,因为它们不是 Java 源文件,可能尚未复制到编译输出目录中。

    假设它们在 compliation 目录中,重写文件加载器以使用基于类 laoder 路径的相对路径。这将在目录中扩展的 .class 文件集合(以及稍后在打包的 JAR 文件中)很好地工作。

    【讨论】:

      【解决方案5】:

      与其试图弄清楚发生了什么,不如打印发生了什么......

      对您的代码进行此更改:

      log(myfile.getName() + "(full path=" + myfile.getAbsolutePath() + ") does not exist");
      

      您可能会发现它没有使用您认为的目录,或者(取决于您的文件系统)它可能正在尝试创建一个名称为 "src/mypackage/myscript.abc" 的文件 - 即带有嵌入斜杠的文件名。

      【讨论】:

        【解决方案6】:

        您可以简单地声明抛出此异常来修复它。像这样:

        public static void main(String args[]) throws FileNotFoundException{
        
        
                FileReader reader=new FileReader("db.properties");
        
                Properties p=new Properties();
                p.load(reader);
            }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多