java - 在 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,它在运行我的测试时在这一行上得到一个空指针异常。
解决方案
您无法从 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);
}
}
推荐阅读
- docker - 使用 Dockerfile 部署 saleor 失败
- django - 使用 Django 和 CSS 的简单树
- typescript - 如何将 TypeScript 可区分联合转换为对象
- angular - 我的 component.html 文件没有读取我的 component.ts 变量,有什么解决方案吗?
- r - 如何在ggplot2的辅助轴上添加水平截距
- sql - 为什么我的 SQL 查询在我指定 ROWNUM 时比在 WHERE 子句中指定日期范围时慢
- flutter - 如何减少数据表中项目之间的间距并使用颤振使文本对齐末端
- angular - 从 REST API Get 方法中保存数据并再次使用它
- c++ - 如何让函数作用于非参数变量?
- pointers - 为什么 V8 使用指针标记而不是 NaN 装箱?