2015-09-10 5 views
0

Мне нужно предоставить файл настроек для моей программы, к которому у пользователя должен быть доступ, чтобы написать некоторые необходимые мне настройки.
Я создал файл под новым каталогом (называемым настройками) в корне моего приложения, но у меня есть проблема с его поиском во время выполнения.
Я использую
File SettingsFile=new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()+"settings/CreateSettings.txt");
Когда я выполнить это при затмении я получаю
/application/home/dir/target/classes/settings/ZipCreateSettings.txt, что неправильно.получить корневую директорию приложения maven

Если я выполнить его на терминале с помощью Java -jar, я получаю правильный путь,
/application/home/dir/settings/ZipCreateSettings.txt

Это вызывает у меня проблемы, потому что мне нужно запустить приложение прямо из затмения и не использовать терминал, даже хотя он будет выполнен с использованием банки, когда он будет запущен и запущен.
Я не могу так держать, потому что этот код может оказаться в чьих-то руках, и они понятия не имели, что с ним делать.

Я также использовал некоторые другие методы, такие как new java.io.File("").getAbsolutePath();, но это всегда дает мне текущий рабочий каталог, поэтому, если я выполню банку из/home, я бы получил/home.

Я думаю, что проблема может быть maven (с которой я вообще не знаком), так как мой код работал с простым Java-приложением некоторое время назад.

+0

'System.getProperty (« user.dir »);' Это то, что вы ищете? – McNultyyy

+0

@McN no, это получает текущий каталог пользователя,/home например –

+0

Вы думаете о 'user.home',' user.dir' - текущий рабочий каталог. Поэтому вы должны найти файл как «System.getProperty (« user.dir ») +« // settings // CreateSettings.txt »;' – McNultyyy

ответ

0

Поскольку ваш файл будет находиться вне вашего пути к классу, он в основном находится вне вашего приложения. Вашему приложению не известно о файлах, находящихся за пределами его пути к классам. Таким образом, вам понадобится какой-то способ предоставить полный/абсолютный путь к вашему файлу. Вы не можете использовать загрузчик классов в своем случае.

Я предлагаю вам использовать системный параметр вместо жестко заданного значения. См. here

+0

не могу добавить его в путь класса? –

+0

Да, либо вы перемещаете файл внутри вашего пути к классам. Обычно основной/ресурс включен в путь к классам. Или вы добавляете папку в свой путь сборки. В Eclipse Щелкните правой кнопкой мыши свой проект -> Свойства -> путь сборки Java -> Источник -> Добавить папку. Затем добавьте шаблон exclusuion ** в свою папку, чтобы он знал, что ваша папка не будет содержать файлы .class. – pmartin8