0

注意:我在这里只对“纯 JRE”解决方案感兴趣:即涉及 JRE 附带的类型的解决方案(并且很可能存在于java.io包中)。我确信Apache Commons 等提供了可以通过单个方法调用很好地做到这一点的实用程序类,但我在这里需要纯 JRE。

我有以下运行时目录结构:

MyProject/
    fizz.txt
    src/
        com/
            myorg/
                Driver

Driver是一个入口点(包含一个静态main方法),我实际上将从命令行调用它,与我的项目的其他构建/部署等分开:

java com.myorg.Driver -url blah.example.com

等等

在里面Driver,我需要阅读fizz.txt并用它做一些事情。注意:无论如何,fizz.txt始终位于上面的 3 个父目录。Driver

在里面Driver我有以下代码:

File fizz = new File("../../../fizz.txt");
System.out.println("fizz = " + fizz.getAbsolutePath());

当我运行时Driver,我得到以下异常:

Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: ../../../fizz.txt not found.
    at com.myorg.Driver(Driver.java:76)
    at com.myorg.Driver.main(Driver.java:45)
fizz = /home/myuser/relay/workbench/eclipse-juno/workspace/MyProject/../../../

似乎 Java 不尊重“ ..”作为关系“父级”的概念。所以我问:我如何使用 File API(再次,纯 JREfizz.txt )来访问Driver?提前致谢!

4

2 回答 2

0

File从 Java 的执行角度来看,引用是上下文相关的,而不是你的类......

就 Java 而言,您的执行上下文将是MyProject,这意味着您应该尝试new File("fizz.txt")使用

于 2013-09-20T09:39:21.753 回答
0

Java“..”的概念视为“父级”的关系。问题是,它使用当前工作目录作为参考,而不是你的类所在的目录。

如果你想把文件和你的类树放在一起,你可以考虑调用getClass().getResourceAsStream("file name")方法来访问它。那么您的代码将不依赖于当前工作目录。

于 2013-09-20T09:44:27.287 回答