Получение файла в качестве ресурса в пути к классам

Я пытаюсь прочитать хранилище ключей как ресурс. Пример кода ниже. Проблема, с которой я сталкиваюсь, заключается в том, что inputStream остается нулевым.

import java.io.InputStream;

import java.util.List;

import org.linguafranca.pwdb.kdbx.KdbxCreds;
import org.linguafranca.pwdb.kdbx.simple.SimpleDatabase;
import org.linguafranca.pwdb.kdbx.simple.SimpleEntry;
import org.linguafranca.pwdb.Credentials;

import org.apache.log4j.Logger;



public class Security {

private static final String PATH = null;
private static final String KEYSTORE_PASSWORD = "admin";
static List<SimpleEntry> entries = null;

final static Logger logger = Logger.getLogger(Security.class);

public Security(){


    //TODO: initialize security and it's passwords


}

public static void init(){

try {

        //InputStream inputStream = new FileInputStream(".keePass.kdbx");
        InputStream inputStream = Security.class.getClassLoader().getResourceAsStream("keePass.kdbx");

        // password credentials
        Credentials credentials = new KdbxCreds(KEYSTORE_PASSWORD.getBytes());

        SimpleDatabase database = SimpleDatabase.load(credentials, inputStream);
        // Jaxb implementation seems a lot faster than the DOM implementation
        // visit all groups and entries and list them to console
        entries = database.getRootGroup().getEntries();

    }catch(Exception exception){
        logger.error(exception);
    }

}
}

Сначала я думал, что это просто вопрос пути, однако, хотя сам файл находится рядом с классами, я не могу его загрузить.

Получение файла в качестве ресурса в пути к классам

Даже если я использую абсолютный путь, результат тот же.

Какую ошибку я делаю?

Ваш файл находится в пути к источникам. Но это в пути к классам? (Где находятся скомпилированные пожары .class) вы используете maven?

mnesarco 11.03.2019 13:11

Это действительно было проблемой, я не поместил соответствующую папку в конфигурацию запуска.

Lone Wanderer 11.03.2019 13:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
85
1

Ответы 1

Когда вы используете getClassLoader().getResourceAsStream("..."), он пытается найти файл в корне пути к классам. Попробуй использовать:

Security.class.getResourceAsStream("keePass.kdbx");

В этом случае он попытается найти файл в том же месте, что и класс Security.

Подробнее В чем разница между Class.getResource() и ClassLoader.getResource()?

Другие вопросы по теме