在Java File API中获取父目录

时间:2013-09-20 09:35:44

标签: java file-io filesystems

注意:我只对这里的“纯JRE”解决方案感兴趣:也就是说,涉及JRE附带的类型的解决方案(最有可能存在于java.io内部包)。我肯定 Apache Commons等提供的实用程序类可以通过单个方法调用很好地完成这项工作,但我需要纯粹的JRE。

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

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

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

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

Driver内,我需要阅读fizz.txt并对其进行处理。注意:fizz.txt 始终位于Driver之上的3个父目录,无论如何。

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并没有将“..”的概念视为关系“ parent-of ”。所以我问:如何使用文件API(再次,纯JRE )从fizz.txt访问Driver?提前谢谢!

2 个答案:

答案 0 :(得分:0)

File引用是从Java的执行点开始的上下文,而不是你的类...

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

答案 1 :(得分:0)

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

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