Нахождение внешнего файла в Java - PullRequest
1 голос
/ 07 июня 2011

Я не уверен, что запутался в своем опыте с ++, но ...

Я пишу (изучаю) Java-приложение, которое загружается в текстовый файл с датой конфигурации. Kindof как INI-файл.

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

Я хочу, чтобы этот дополнительный текстовый файл хранился в том же каталоге, что и файл приложения jar. Однако я не буду точно знать, где находится этот файл приложения на клиентском компьютере - как в каком каталоге. И, поскольку мне нужен полный путь для обеспечения загрузки файла, мне нужен способ программного поиска пути к файлу jar во время выполнения.

Оглядываясь вокруг, я думал, что что-то нашел, но при тестировании он давал мне местоположение файла класса, который его вызывал:

String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 

if (applicationDir.endsWith(".exe"))
{
    applicationDir = new File(applicationDir).getParent();
}
else
{
    // Add the path to the class files  
    applicationDir += getClass().getName().replace('.', '/');

    // Step one level up as we are only interested in the 
    // directory containing the class files
    applicationDir = new File(applicationDir).getParent();
} 

Итак, что еще я могу сделать, чтобы найти фактический путь к файлу jar? (И не текущий рабочий каталог, так как это может измениться, поэтому System.getProperty ("user.dir") у меня тоже не работает)

1 Ответ

1 голос
/ 07 июня 2011

Вы можете поместить свой ini (в java мы используем пакеты ресурсов - .properties - фактически) в classpath и загрузить его через ClassLoader .

edit: Если вы решили использовать пакеты ресурсов, вы можете пропустить использование classloader напрямую, см. this

...