这是我第一次在 stackoverflow 上发帖。我有一个关于当我尝试从 Netbeans IDE 7.4 中的通用文本文件读取数据时遇到的一系列错误的问题。我使用的是带有 Mac OS X Mavericks 的 2009 iMac。
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 的计算机上从未发生过这种情况。有人能解决这个困境吗?
最佳答案
输出清楚地表明您正在查看不同的目录。
Directory: /Users/omavine/Desktop/aPlusComputerScience
Path: /Users/maven/Desktop/aPlusComputerScience/newfile.dat
工作目录位于omavine
的桌面中。您的文件位于 maven
的桌面中。
不要给出相对路径,而是尝试给出文件的实际路径。
File f = new File("/Users/maven/Desktop/aPlusComputerScience/newfile.dat");
这应该有效。
编辑:关于getResourceAsStream
的NullPointerException
java API 文档指出
Returns: An input stream for reading the resource, or null if the resource could not be found
并且扫描器
抛出NullPointerException
。
引用javadocs
关于java - 具有正确路径的 netbeans 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158217/