首页 > 解决方案 > 在 Java 库中创建可由消费应用程序读取的文件

问题描述

我正在创建一个 Java sdk,我最终希望调用version一个包含当前版本 sdk 的字符串的文件。

我想读取这个文件并将它传递给我在 sdk 中进行的底层 API 调用。

目前,该文件位于src/main/resources/version并仅包含0.1.0.

我有这个读取文件并返回版本的方法。

private static String getVersion() {
        URL versionFile = ConfigurationUtils.class.getResource("version");
        Path path = Paths.get(String.valueOf(versionFile));
        String version = null;
        try {
            version = Files.readAllLines(path).get(0);
        } catch (IOException e) {
            // The project should never build without if this happens so therefore just print a stacktrace
            e.printStackTrace();
        }

        return version;
    }

在我尝试使用这个 sdk 的另一个项目中,我java.nio.file.NoSuchFileException: null在这条线上得到了一个

在此处输入图像描述

我可以看到该文件确实存在于我的依赖项中在此处输入图像描述

知道我在这里缺少什么吗?

** 更新 **

当尝试来自可能重复的建议时,我的 sdk 甚至不会编译 b/c,它在运行我的测试时在这一行上得到一个空指针异常。

在此处输入图像描述

src/main/resources/version肯定存在在此处输入图像描述

标签: java

解决方案


您无法从 Jar 中读取资源,因为您试图将其作为文件读取,而它不是。相反,您应该做的是使用 BufferedReader 读取 InputStream 的所有行。

    private static String getVersion() throws IOException {
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(ConfigurationUtils.class.getResourceAsStream("version")))) {
            return reader.lines()
                    .findFirst()
                    .orElseThrow(IllegalStateException::new);
        }
    }

推荐阅读