相对文件路径问题
所以这是我的程序,它运行正常:
import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.Scanner; import java.util.Locale; public class ScanSum { public static void main(String[] args) throws IOException { Scanner s = null; double sum = 0; try { s = new Scanner(new BufferedReader(new FileReader("D:/java-projects/HelloWorld/bin/usnumbers.txt"))); s.useLocale(Locale.US); while (s.hasNext()) { if (s.hasNextDouble()) { sum += s.nextDouble(); } else { s.next(); } } } finally { s.close(); } System.out.println(sum); } }
如您所见,我正在使用我正在阅读的文件的绝对路径:
s = new Scanner(new BufferedReader(new FileReader("D:/java-projects/HelloWorld/bin/usnumbers.txt")));
当我尝试使用相对路径时出现问题:
s = new Scanner(new BufferedReader(new FileReader("usnumbers.txt")));
我收到一个错误:
Exception in thread "main" java.lang.NullPointerException at ScanSum.main(ScanSum.java:24)
文件usnumbers.txt与ScanSum.class文件位于同一目录中:
D:/java-projects/HelloWorld/bin/ScanSum.class D:/java-projects/HelloWorld/bin/usnumbers.txt
我该怎么解决这个问题?
从哪个目录执行类文件? (这将是相对路径的当前工作目录和基目录。)
如果你只是从eclipse启动应用程序,项目目录将是工作目录,在这种情况下你应该使用"bin/usnumbers.txt"
。
如果aioobe @的建议对您不起作用,并且您需要找出应用程序运行的目录,请尝试记录以下内容:
new File(".").getAbsolutePath()
NullPointerException
是由于new FileReader()
表达式抛出FileNotFoundException
,并且变量s
永远不会重新赋值为非null值。
找不到文件“usnumbers.txt”,因为相对路径已解析(与所有程序一样)相对于当前工作目录,而不是类路径上的众多条目之一。
要解决第一个问题,请永远不要分配无意义的null
值,只是为了隐藏编译器有关未分配变量的警告。 使用这样的模式:
FileReader r = new FileReader(path); try { Scanner s = new Scanner(new BufferedReader(r)); ... } finally { r.close(); }
对于第二个问题,在启动java
之前将目录更改为包含“usnumbers.txt”的目录。 或者,将该文件移动到运行java
的目录。
它必须是FileNotFoundException,导致finally块中的NPE。 默认情况下,Eclipse使用项目文件夹(在您的情况下为D:/ java-projects / HelloWorld )作为工作目录来执行该类。 将usnumbers.txt文件放在该文件夹中并尝试。 或者在“运行配置” – >“参数”选项卡中更改工作目录
由于您的工作目录是“D:/ java-projects / HelloWorld”
@pdbartlett的id很棒,但是String filePath = new File(".").getAbsolutePath()
将输出“D:/ java-projects / HelloWorld /”。 这是不容易添加你的额外相对路径,如位于资源文件夹中的“filePath”+“/ src / main / resources /”+ FILENAME。
我建议使用String filePath = new File("").getAbsolutePath()
返回项目根文件夹
在Eclipse中,您还可以在“运行配置 – >比TAB”类路径下查看“。
默认情况下,绝对路径列在[ icon ]’ your.path ‘中的“用户条目”下(默认类路径)
- 在Eclipse调试器中,哪些更改可以“热代码替换”到正在运行的JVM中?
- 是否可以使用ant自动创建inno安装包?
- Eclipse类路径条目仅用于测试
- 有没有办法使用Eclipse列出某个类的equals()的所有调用?
- eclipse格式java源代码基于方法调用
- 从Eclipse导出jar时“无法从给定的启动配置中找到main方法”错误
- Java代理开发框架 – Eclipse和Maven集成
- EclipseLinke:没有名为META-INF / services / javax.persistence.spi的资源文件:找不到PersistenceProvider
- ClassNotFoundException oracle.jdbc.driver.OracleDriver仅在servlet中使用Eclipse