我需要在Java项目中使用什么相对路径

时间:2010-10-11 09:16:38

标签: java path relative

我的结构如下:

src 
  -|com 
       -|company 
               -|Core --> JAVA class 
  -|rules --> text files

Inside Core是一个使用以下内容的Java类:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));

但我无法弄清楚使用什么相对路径。现在我用:

"..\\..\\..\\..\\rules\\rule1.txt"

我也尝试过:

"../../../../rules/rule1.txt"

我哪里出错了? 请帮助,提前致谢!

4 个答案:

答案 0 :(得分:3)

它不起作用。相对路径相对于当前应用程序的工作目录类的目录。如果您想了解当前的工作目录,请使用System.getProperty("user.dir")

更好的方法是将rules目录添加到类路径中,然后使用Class#getResourceAsStream()


另一种方法是以其他方式设置rules目录的路径:如果可行,可以提供命令行选项或设置一些系统属性(例如java -Drules.path=/path/to/rules ...,然后通过System.getProperty("rules.path")读取)。

答案 1 :(得分:2)

这取决于您启动的位置,而不是Java类的包结构。正如@EJP指出的那样,其他API确实反映了您的包结构。

我过去使用的一个技巧是让一行代码创建一个文件“SomeSillyName.txt”。并查看实际弹出的位置。

我的猜测是你可能会从src启动,因此一个简单的“rules / rule1.txt”就可以了。

答案 2 :(得分:1)

执行时的当前目录与当前类所在的包无关。它不会改变。

如果您的文件随应用程序一起分发,请使用Class.getResourceAsStream()。

答案 3 :(得分:0)

如果您使用的是像Eclipse这样的IDE,则工作目录默认为项目根文件夹。所以src/rules/rule1.txt应该有效。 (或者我误解了你的文件夹结构。)