我的结构如下:
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"
我哪里出错了? 请帮助,提前致谢!
答案 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
应该有效。 (或者我误解了你的文件夹结构。)