java - 当我使用 FileInputStream 导出 JAR 文件时 FileNotFoundException

标签 java firebase jar google-cloud-firestore

目前我正在 Java 中设置 Firebase 云 Firestore,使用 IntelliJ 作为 SDK。 Firebase 文档中说需要服务帐户 key ,它是一个 json 文件。我使用 FileInputStream 方法获取此 json 文件,当我获取该文件执行程序时没有任何问题,但是当我将其导出为 JAR 库时,使用该 JAR 的项目找不到服务帐户 key ,然后它就无法连接到我的 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 文件中执行任何操作或使用等效方法吗?我想在其他项目中使用这个项目作为库。

最佳答案

您好,我建议您将 api key 和 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”);

关于java - 当我使用 FileInputStream 导出 JAR 文件时 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733501/

相关文章:

java - 如何让一个线程等待并执行另一个???

java - 如何使用 onUpgrade() 添加多个表而不丢失任何数据或表

java - Android Studio gradle buildConfigField 设置

android - 如何使用 Firestore 填充引用字段

java - 如何在新进程中执行Jar文件并关闭原来的Jar?

java - scala maven 插件没有将 scala 文件打包到 jar 中

java - 如何在 Android 中使用 Volley 发送 Post 请求?

android - Dart Flutter Firebase FirebaseException([cloud_firestore/permission-denied] 调用者无权执行指定操作。)

node.js - Firebase Angular 4 基于 Node 环境初始化

java - JAR 不在类路径上,强制类加载器从中读取文件