我是java的新手。
我有一些目录结构
product/
conf/
classes/com/../..
conf/
包含一些配置文件,而在classes/
下我有我的应用程序。
我如何从java代码中确保我能够在conf/
中找到文件,尽管我正在执行它(例如来自eclipse,来自不同目录,来自crontab等)。
P.S。
conf/
中的文件不是资源,因为需要由用户编辑。
有没有办法知道我.class
的位置,所以我可以使用该目录的相对路径到达我的目录(例如MY_CLASS_DIR /../../../../ conf)
答案 0 :(得分:4)
我会将conf目录放入类路径中。这样你总能找到它们:
YourClass.class.getClassLoader().getResource("conf/....");
答案 1 :(得分:2)
您可以使用绝对路径,包括产品的方式。
或者您可以使用配置设置,通过启动您的程序,如
java -DXY_HOME=/some/path/product ...
从javacode中,您可以使用它:
String xyHome = System.getProperty ("XY_HOME")
或者您在主目录中使用了一种inifile,您可以在其中指定查找conf目录的位置。
多次重读您的问题,我不清楚您的目标是什么。要独立于你所在的地方找到conf目录(eclipse,crontab,...)?但标题要求CWD,这是相反的 - 目录,取决于你在哪里。
两者都有可能,但你必须决定你想要什么。
答案 2 :(得分:1)
使用相对路径比使用绝对路径更安全。即使你明天JAR你的课程它将按原样工作,
在部署期间将配置文件放在类路径中。(请注意 项目目录结构可以与部署目录结构的结构不同)
product/
classes/com/../..
classes/conf/some_conf.properties
然后您可以使用Apache通用配置来获取文件的URL
URL urlOfFile = org.apache.commons.configuration.
ConfigurationUtils.locate("conf/some_conf.properties");
您可以尝试的另一种选择是,
URL urlOfFile = <SomeClassFromClassesFolder>.class.
getClassLoader().getResource(resourceFile);
一旦获得配置文件的URL,就可以非常简单地获取流,
InputStream stream = urlOfFile.openStream();
祝你好运。
为了您的理解,您也可以参考以下内容,
答案 3 :(得分:0)
您可以通过以下方式找出工作目录的绝对路径:
String str = new File("").getAbsolutePath()