Не удается загрузить файл свойств из каталога ресурсов
Я импортировал проект из репозитория Git и добавил к нему природу Maven в Eclipse. В папке ресурсов я добавил файл конфигурации с именем myconf.properties
. Теперь, когда я пытаюсь открыть этот файл из своего Java-кода, я получаю FileNotFoundException
. Файл также присутствует в папке target/classes
, сгенерированной после компиляции проекта maven.
Может ли кто-нибудь сказать мне, что может быть проблемой? Мой Java-код, который пытается загрузить этот файл:
props.load(new FileInputStream("myconf.properties"));
где props
- объект Properties
.
Может ли кто-нибудь дать мне несколько советов о том, как решить эту проблему?
Ответы
Ответ 1
Если после компиляции файл помещается под цель/классы, он уже находится в каталоге, который является частью пути сборки. Каталог src/main/resources - это каталог по умолчанию для Maven для таких ресурсов, и он автоматически помещается в путь сборки плагином Eclipse Maven (M2E). Таким образом, нет необходимости переместить файл свойств.
Другая тема: как получить такие ресурсы. Ресурсы в пути сборки автоматически находятся в пути к классу запущенной программы Java. Учитывая это, вы всегда должны загружать такие ресурсы загрузчиком классов. Пример кода:
String resourceName = "myconf.properties"; // could also be a constant
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
props.load(resourceStream);
}
// use props here ...
Ответ 2
Я думаю, вам нужно поставить его под src/main/resources
и загрузить его следующим образом:
props.load(new FileInputStream("src/main/resources/myconf.properties"));
Как вы пытаетесь загрузить его, сначала проверьте базовую папку вашего проекта. Если он находится в target/classes
и вы хотите его загрузить, сделайте следующее:
props.load(new FileInputStream("target/classes/myconf.properties"));
Ответ 3
Щелкните правой кнопкой мыши папку Resources
и выберите Build Path > Add to Build Path
Ответ 4
Я использую что-то вроде этого, чтобы загрузить файл свойств.
final ResourceBundle bundle = ResourceBundle
.getBundle("properties/errormessages");
for (final Enumeration<String> keys = bundle.getKeys(); keys
.hasMoreElements();) {
final String key = keys.nextElement();
final String value = bundle.getString(key);
prop.put(key, value);
}
Ответ 5
Если это простое приложение, тогда можно использовать getSystemResourceAsStream.
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties"))..
Ответ 6
Я верю, что работаю от Eclipse, если вы используете "myconf.properties" как относительный путь. Структура файла должна выглядеть как-то вроде
ProjectRoot
src
bin
myconf.properties
Eclipse будет искать файл в корневом каталоге проекта, если в пути к файлу не указаны другие dir