Невозможно использовать свойства доступа из файла свойств в IntelliJ IDEA, используя класс Singleton - PullRequest
0 голосов
/ 18 февраля 2020

Я практиковался для доступа к свойствам из файла свойств с помощью одноэлементного класса PropertyLoader, но мой проект maven не может найти файл в ресурсах и дает исключение нулевого указателя.

Вот код класса.

import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;

public class PropertyLoader {
    private static PropertyLoader instance = null;
    private Properties properties;
    private final static Logger LOGGER = Logger.getLogger(PropertyLoader.class.getName());


    protected PropertyLoader() throws IOException {
        //TODO: Fix problem with loading properties file below
        properties = new Properties();
        properties.load(PropertyLoader.class.getResourceAsStream("app.properties"));

    }

    public static PropertyLoader getInstance() {
        if(instance == null) {
            try {
                instance = new PropertyLoader();
            } catch (IOException ioe) {
                LOGGER.error("Error Occurred while creating Property Loader instance: " + ioe.getMessage());
            }
        }
        return instance;
    }

    public String getValue(String key) {
        LOGGER.info("Getting property value for: " + key);
        return properties.getProperty(key);
    }

}

Ошибка, которую я получаю:

Исключение в потоке "main" java .lang.NullPointerException: параметр inStream имеет значение null в java .base / java .util.Objects.requireNonNull (Объекты. java: 247) в java .base / java .util.Properties.load (Свойства. java: 404) в дюймах. net .sudhir. evernote.client.batchjob.PropertyLoader. (PropertyLoader. java: 16) в. .sudhir.evernote.client.batchjob.EvernoteClient. (EvernoteClient. java: 51) в. net .sudhir.evernote.client.batchjob.BatchProcess.main (BatchProcess. java: 33)

Вот снимок экрана со структурой проекта.

Структура проекта в In TelliJ IDEA

1 Ответ

1 голос
/ 18 февраля 2020
properties = new Properties();

try(InputStream inputStream = PropertyLoader.class.getClassLoader().getResourceAsStream("app.properties")) {
    if(inputStream == null)
        throw new FileNotFoundException("File not found in classpath");

    properties.load(inputStream);
}

ПРИМЕЧАНИЕ. Плохо делать вычисления в конструкторе. Лучше создать метод, который загружает файл ресурсов.

...