无论应用程序如何启动,都可以查

时间:2011-05-25 07:39:42

标签: java relative-path

我是java的新手。

我有一些目录结构

  product/
        conf/
        classes/com/../.. 

conf/包含一些配置文件,而在classes/下我有我的应用程序。

我如何从java代码中确保我能够在conf/中找到文件,尽管我正在执行它(例如来自eclipse,来自不同目录,来自crontab等)。

P.S。

conf/中的文件不是资源,因为需要由用户编辑。 有没有办法知道我.class的位置,所以我可以使用该目录的相对路径到达我的目录(例如MY_CLASS_DIR /../../../../ conf)

4 个答案:

答案 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();
祝你好运。

为了您的理解,您也可以参考以下内容,

http://bethecoder.com/applications/tutorials/showTutorials.action?tutorialId=Java_IO_CurrentWorkingDirectory

http://bethecoder.com/applications/tutorials/showTutorials.action?tutorialId=Java_Reflection_WheretheClassloadedfrom 祝你好运。

答案 3 :(得分:0)

您可以通过以下方式找出工作目录的绝对路径:

String str = new File("").getAbsolutePath()