Найти файл conf независимо от того, как приложение запущено - PullRequest
3 голосов
/ 25 мая 2011

Я новичок в Java.

У меня есть некоторая структура каталогов

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

conf/ содержит некоторый файл конфигурации, в то время как под classes/ у меня есть приложение.

Как я могу гарантировать изнутри java-кода, что я могу найти файл в conf/, несмотря на то, как я его выполняю (например, из eclipse, из разных каталогов, из crontab и т. Д.).

PS

Файлы в conf/ не являются ресурсами, так как должны редактироваться пользователем.Есть ли способ узнать, где мой .class, поэтому я могу использовать относительный путь из этого каталога, чтобы добраться до моего каталога (например, MY_CLASS_DIR /../../../../ conf)

Ответы [ 4 ]

4 голосов
/ 25 мая 2011

Я бы поместил каталог conf в путь к классам. Таким образом, вы всегда можете найти их по:

YourClass.class.getClassLoader().getResource("conf/....");
2 голосов
/ 25 мая 2011

Вы можете использовать абсолютный путь, включая путь к продукту.

Или вы можете использовать настройку конфигурации, запустив вашу программу как

java -DXY_HOME=/some/path/product ...

Из javacode, вы используете его:

String xyHome = System.getProperty ("XY_HOME") 

Или вы используете видofififile в вашем домашнем каталоге, где вы указываете, где искать conf-каталог.

Перечитывая ваш вопрос несколько раз, мне неясно, какова ваша цель.Чтобы найти Conf Dir независимо от того, где вы находитесь (Eclipse, Crontab, ...)?Но заголовок запрашивает CWD, а наоборот - каталог, в зависимости от того, где вы находитесь.

Возможно и то и другое, но вы должны решить, чего хотите.

1 голос
/ 25 мая 2011

Безопасно использовать относительные пути, чем абсолютные.Даже если вы завтра JAR используете, классы будут работать как есть,

Поместите ваши файлы конфигурации в classpath во время развертывания (обратите внимание, что структура каталогов проекта может отличаться от структуры каталогов развертывания)

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 Удачи.

0 голосов
/ 25 мая 2011

Вы можете узнать, каков абсолютный путь рабочего каталога:

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