相对文件路径的问题

新手上路,请多包涵

所以这是我的程序,它工作正常:

 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

我该如何解决这个问题?

原文由 Richard Knop 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 331
2 个回答

类文件从哪个目录执行? (这将是当前工作目录和相对路径的基本目录。)

如果您只是从 eclipse 启动应用程序,项目目录将是工作目录,在这种情况下您应该使用 "bin/usnumbers.txt"

原文由 aioobe 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果 aioobe@ 的建议对您不起作用,并且您需要找出应用程序从哪个目录运行,请尝试记录以下内容:

 new File(".").getAbsolutePath()

原文由 pdbartlett 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏