Использование config.properties в проекте

127
07 ноября 2019, 20:00

Всем привет!

Есть проект, в котором 3 класса, которые взаимодействуют друг с другом. 4 класс - SendProperties, который позволяет взаимодействовать с файлом config.properties. Вот код:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SendProperties {
    private static Properties properties= new Properties(); ;

    public static String getProperty(String propertyKey) {
        if(properties.containsKey(propertyKey)) {
            return properties.getProperty(propertyKey);
        } else {
            return null;
        }
    }
    public static void setProperties(String file) throws IOException {
        properties.load(new FileInputStream(new File(file)));
    }
    public static Properties getProperties() {
        return properties;
    }
}

Основной класс SendJMS. Его конструктор загружает файл:

 public SendJMS() {
        try {
            SendProperties.setProperties("config.properties");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

При запуске получаю FileNotFoundException. Хотя файл точно лежит в проекте в папке resources

Сделано это было для того, чтобы использовать один экземпляр файла пропертей во всех классах, а не создавать в каждом по экземпляру Как можно решить данную проблему? Или есть какие еще способы для того, чтобы использовать config.properties во всех классах?

Заранее спасибо

Answer 1

Если путь не указан для файла File или FileInputStream, то подразумевается что он относительный для конечного файла. Папка ресурсов не всегда может быть относительным путём для такого файла. Если эта папка указана на пути классов, как в большинстве проектов, которые собираются с помощью maven или cradle, то наиболее подходящий способ доступа к файлу является использование загрузчика классов. Можно использовать getClass().getClassLoader().getResourceAsStream().

Answer 2

Для решения данной проблемы был использован блок static в классе SendProperties

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SendProperties {
    private static Properties properties = new Properties(); ;

    public static String getProperty(String propertyKey) {
        if(properties.containsKey(propertyKey)) {
            return properties.getProperty(propertyKey);
        } else {
            return null;
        }
    }
   static {
        try {
            properties.load(ClassLoader.class.getResourceAsStream("/config.properties"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Properties getProperties() {
        return properties;
    }
}
READ ALSO
Андроид передача файла по сети

Андроид передача файла по сети

Всем приветОпыта с андроидом нет, поэтому получил вот такую проблему, которую никак не могу решить

113
Почему не подключается файл со стилями к jsp?

Почему не подключается файл со стилями к jsp?

Приложение с поддержкой spring-mvc Вот как я его подключаю:

176
Правильное условие для RegExp. (vk чат бот)

Правильное условие для RegExp. (vk чат бот)

Пишу чат бота для вкБиблиотека - node-vk-bot-api

122
Работа с сессиями

Работа с сессиями

Учусь работать с сессиями и мне надо их в базу данных как-то сохранять ( PostgreSQL )Пишу на nodejs с использованием Express

133