我已经阅读了一些涉及相同问题的线程,但解决方案无法正常工作。 :/
我使用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
结束,拔毛。
答案 0 :(得分:7)
未处理的异常类型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通常会建议一些非常好的解决方案。在这种情况下,一个建议是“将一个throws子句添加到main”。
答案 1 :(得分:1)
在创建文件阅读器之前,使用您创建并验证的文件描述符。此外,您可能会遇到使用相对路径的问题。为什么带有完整路径的行被注释掉了?无论如何,这里是代码:
if(file1.exists()) {
log(myfile + " exists. length : " + myfile.length());
FileReader fr = new FileReader(file1);
}
答案 2 :(得分:1)
我发现您尝试指定文件的完整路径,但由于以下错误而失败:
您尚未宣布或试图抓住 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);
}
}
答案 3 :(得分:0)
您希望Eclipse在项目根目录中运行该程序。除非你对你的“运行”配置做了一些特别的事情,否则如果真的从那里开始,我会感到很惊讶。
尝试打印出当前的工作目录,以确保这是正确的路径。
然后尝试验证bin / build目录是否包含“* .abc”文件,因为它们不是Java源文件,可能尚未复制到编译输出目录中。
假设它们位于compliation目录中,请重写文件加载器以使用基于类别laoder路径的相对路径。这将适用于目录中的.class文件的扩展集合(以及稍后在打包的JAR文件中)。
答案 4 :(得分:0)
不是试图弄清楚发生了什么,为什么不打印发生了什么......
对您的代码进行此更改:
log(myfile.getName() + "(full path=" + myfile.getAbsolutePath() + ") does not exist");
您可能会发现它没有使用您认为的目录,或者(取决于您的文件系统)它可能正在尝试创建一个名称为"src/mypackage/myscript.abc"
的文件 - 即带有嵌入斜杠的文件名。 / p>
答案 5 :(得分:0)
你只需声明抛出此异常即可修复它。像这样:
public static void main(String args[]) throws FileNotFoundException{
FileReader reader=new FileReader("db.properties");
Properties p=new Properties();
p.load(reader);
}