这是我第一次在stackoverflow上发帖。我有一个关于当我尝试从Netbeans IDE 7.4中的通用文本文件读取数据时遇到的一系列错误的问题。我正在使用2009年iMac和Mac OS X Mavericks。
import java.util.Scanner;
import java.io.File;
public class two {
public static void main(String[] args) throws Exception
{
System.out.println("Directory: "+System.getProperty("user.dir"));
File f = new File("newfile.dat");
Scanner s = new Scanner(f);
}
}
此代码将返回这组错误:
Directory: /Users/omavine/Desktop/aPlusComputerScience
Exception in thread "main" java.io.FileNotFoundException: newfile.dat (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:143)
at java.util.Scanner.<init>(Scanner.java:656)
at apluscomputerscience.two.main(two.java:22)
at apluscomputerscience.APlusComputerScience.main(APlusComputerScience.java:21)
Java Result: 1
这会向我表明文件根本没有在正确的路径中搜索,但是,当我将文件名与绝对路径进行比较时:
System.out.println("Directory: "+System.getProperty("user.dir"));
File f = new File("newfile.dat");
System.out.println("Path: "+f.getAbsolutePath());
然后输出如下:
Directory: /Users/omavine/Desktop/aPlusComputerScience
Path: /Users/omavine/Desktop/aPlusComputerScience/newfile.dat
这表明(对我而言)是否在正确的位置搜索文件,无论我是否使用显式路径名查找。
但是,当我尝试构建扫描程序时,(即使使用绝对路径名):
Directory: /Users/omavine/Desktop/aPlusComputerScience
Path: /Users/maven/Desktop/aPlusComputerScience/newfile.dat
Exception in thread "main" java.io.FileNotFoundException: /Users/omavine/Desktop/aPlusComputerScience/newfile.dat (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:143)
at java.util.Scanner.<init>(Scanner.java:656)
at apluscomputerscience.two.main(two.java:23)
at apluscomputerscience.APlusComputerScience.main(APlusComputerScience.java:21)
Java Result: 1
仍然是同样的错误。有趣的是,尝试使用以下方法构建扫描程序:
File f = new File("newfile.dat");
Scanner s = new Scanner(f.getClass().getResourceAsStream("newfile.dat"));
返回:
Directory: /Users/omavine/Desktop/aPlusComputerScience
Path: /Users/omavine/Desktop/aPlusComputerScience/newfile.dat
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at java.util.Scanner.<init>(Scanner.java:608)
at apluscomputerscience.two.main(two.java:23)
at apluscomputerscience.APlusComputerScience.main(APlusComputerScience.java:21)
Java Result: 1
(使用getClass()读取文件.getResourceAsStream()似乎返回空指针异常,无论出于何种原因。)
我希望能够在家用电脑上阅读文件。在使用JCreator IDE的其他计算机上,我从未发生过这种情况。任何人都可以解决这个难题吗?
答案 0 :(得分:1)
输出清楚地表明您正在查看不同的目录。
Directory: /Users/omavine/Desktop/aPlusComputerScience
Path: /Users/maven/Desktop/aPlusComputerScience/newfile.dat
工作目录位于omavine
的桌面。您的文件位于maven
的桌面。
不要给出相对路径,而是尝试给出文件的实际路径。
File f = new File("/Users/maven/Desktop/aPlusComputerScience/newfile.dat");
这应该有用。
编辑关于NullPointerException
的{{1}}
的java API doc状态
返回: 用于读取资源的输入流,如果找不到资源,则为null
而getResourceAsStream
会抛出Scanner
。
参考javadocs