相对文件路径问题

时间:2010-05-18 19:54:31

标签: java eclipse

所以这是我的程序,它运行正常:

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

我怎么解决这个问题?

5 个答案:

答案 0 :(得分:26)

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

new File(".").getAbsolutePath()

答案 1 :(得分:14)

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

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

答案 2 :(得分:5)

NullPointerException是由于new FileReader()表达式抛出FileNotFoundException,变量s永远不会重新赋值为非空值。< / p>

找不到文件“usnumbers.txt”,因为相对路径已解析(与所有程序一样)相对于当前工作目录,而不是类路径上的众多条目之一。

要解决第一个问题,请永远不要分配无意义的null值,只是为了隐藏编译器有关未分配变量的警告。使用这样的模式:

FileReader r = new FileReader(path);
try {
  Scanner s = new Scanner(new BufferedReader(r));
  ...
} finally {
  r.close();
}

对于第二个问题,在启动java之前将目录更改为包含“usnumbers.txt”的目录。或者,将该文件移动到运行java的目录。

答案 3 :(得分:3)

它必须是FileNotFoundException,导致finally块中的NPE。 默认情况下,Eclipse使用项目文件夹(在您的情况下为 D:/ java-projects / HelloWorld )作为工作目录来执行该类。将usnumbers.txt文件放在该文件夹中并尝试。或者在运行配置中更改工作目录 - &gt;参数选项卡

答案 4 :(得分:0)

在Eclipse中,您还可以查看&#34;运行配置 - &gt;比TAB&#34; Classpath&#34;。

默认情况下,绝对路径列在&#34;用户条目&#34;在[ 图标 ]&#39; your.path &#39; (默认类路径)