Подтвердить что ты не робот

Не удается загрузить файл свойств из каталога ресурсов

Я импортировал проект из репозитория Git и добавил к нему природу Maven в Eclipse. В папке ресурсов я добавил файл конфигурации с именем myconf.properties. Теперь, когда я пытаюсь открыть этот файл из своего Java-кода, я получаю FileNotFoundException. Файл также присутствует в папке target/classes, сгенерированной после компиляции проекта maven.

Может ли кто-нибудь сказать мне, что может быть проблемой? Мой Java-код, который пытается загрузить этот файл:

props.load(new FileInputStream("myconf.properties"));

где props - объект Properties.

Может ли кто-нибудь дать мне несколько советов о том, как решить эту проблему?

4b9b3361

Ответ 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