注意:我只对这里的“纯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
?提前谢谢!
答案 0 :(得分:0)
File
引用是从Java的执行点开始的上下文,而不是你的类...
就Java而言,执行上下文将为MyProject
,这意味着您应该尝试使用new File("fizz.txt")
而不是
答案 1 :(得分:0)
Java 将“...”的概念称为“父 - 的关系”。问题是,它使用当前工作目录作为参考,而不是您的类所在的目录。
如果要将文件与类树放在一起,可以考虑调用getClass().getResourceAsStream("file name")
方法来访问它。那么您的代码将不依赖于当前的工作目录。