FileNotFoundException, когда я использую FileInputStream, экспортирующий файл JAR - PullRequest
0 голосов
/ 06 ноября 2019

В настоящее время я устанавливаю Firebase cloud Firestore в java, используя IntelliJ в качестве SDK. В документации Firebase сказано, что нужен ключ учетной записи службы, который является файлом json. Я использовал метод FileInputStream для получения этого файла json, и у меня нет проблем при получении этого файла, выполняющего программу, но когда я экспортирую его как библиотеку JAR, проект, использующий этот JAR, не находит ключ учетной записи службы. , а затем он не может соединиться с моей firebase.

Теперь я могу подключиться к firebase, но я хочу выполнить весь этот процесс в библиотеке, которую я делаю. Я показываю вам код, который получает мой файл.

public InputStream obtainInputStream(String pathFile) throws ReadFileException {

        InputStream inputStream;

        try {
            // Create File Input Stream
            inputStream = new FileInputStream(pathFile);

        } catch (FileNotFoundException e) {
            // Get Input Stream
            inputStream = getClass().getResourceAsStream(pathFile);

            // Check if File Exists
            if(inputStream == null) {

                throw new ReadFileException(String.format("Error Find File %s", pathFile));

            }
        }
        return inputStream;
    }

Когда я экспортирую весь свой код как файл JAR, он не находит файл и показывает исключение FileNotFoundException, даже когда я сохраняю файл в ресурсахпапки. Могу ли я что-нибудь сделать в файле сборки Gradle или использовать эквивалентный метод? Я хочу использовать этот проект как Libray в другом проекте.

1 Ответ

0 голосов
/ 06 ноября 2019

Здравствуйте, я бы порекомендовал вам экспортировать ключ api и данные соединения firebase в виде набора переменных среды, которые сделают проект простым для экспорта, легко читаемым и изменяемым на других машинах, где вы размещаете проект jar.

вам нужно создать .env в корне проекта и использовать библиотеку dotenv

пример:

в файле .env определяют переменные

 # formatted as key=value
 MY_ENV_VAR1=some_value
 MY_EVV_VAR2=some_value

в файле Java вы можете получить эти переменные, как это

import io.github.cdimascio.dotenv.Dotenv;
Dotenv dotenv = Dotenv.load();
dotenv.get(“MY_ENV_VAR1”);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...