在Java库中创建可由消费应用程序读取的文件
我正在创建一个Java sdk,我最终希望一个名为在Java库中创建可由消费应用程序读取的文件,java,Java,我正在创建一个Java sdk,我最终希望一个名为version的文件包含sdk当前版本的字符串 我想读取这个文件,并在sdk中进行的底层API调用中传递它 目前该文件位于src/main/resources/version中,仅包含0.1.0 我有一个读取文件并返回版本的方法 private静态字符串getVersion(){ URL versionFile=ConfigurationUtils.class.getResource(“版本”); Path Path=Path.get(Strin
version
的文件包含sdk当前版本的字符串
我想读取这个文件,并在sdk中进行的底层API调用中传递它
目前该文件位于src/main/resources/version
中,仅包含0.1.0
我有一个读取文件并返回版本的方法
private静态字符串getVersion(){
URL versionFile=ConfigurationUtils.class.getResource(“版本”);
Path Path=Path.get(String.valueOf(versionFile));
字符串版本=null;
试一试{
version=Files.readAllLines(path).get(0);
}捕获(IOE异常){
//如果发生这种情况,则项目永远不应在未生成的情况下生成,因此只需打印stacktrace即可
e、 printStackTrace();
}
返回版本;
}
在另一个我尝试使用这个sdk的项目中,我在这一行得到了一个java.nio.file.NoSuchFileException:null
不过,我可以看到该文件确实存在于我的依赖项中
你知道我错过了什么吗
**更新**
当尝试来自可能的副本的建议时,我的sdk甚至不会编译b/c。当运行我的测试时,这一行会出现空指针异常
src/main/resources/version
肯定存在您无法从Jar中读取资源,因为您试图将其作为一个文件读取,而它不在其中。相反,您应该做的是使用BufferedReader读取InputStream的所有行
私有静态字符串getVersion()引发IOException{
try(BufferedReader reader=新的BufferedReader(
新的InputStreamReader(ConfigurationUtils.class.getResourceAsStream(“版本”)){
返回reader.lines()
.findFirst()
.orelsetrow(IllegalStateException::new);
}
}
没有。我将getVersion
中的代码更改为try(InputStream-in=ConfigurationUtils.class.getResourceAsStream(“版本”);BufferedReader-reader=new-BufferedReader(new-InputStreamReader(in)){version=reader.readLine();
我的sdk项目不会生成。当我运行测试时,src/main/java/org/catalystal/sdk/version
中不断出现一个版本文件。值得一提的是,我打赌使用返回版本的静态方法自动生成一个版本类会更快。它完成同样的任务,需要几分钟时间,更小、更干净呃,运行时速度明显加快。从什么自动生成?何时自动生成?@Catfish当您的项目没有生成时,您必须检查编译错误。请记住Files.readAllLines()
从文件中读取,但版本
条目在jar中
。请编辑您的问题,以包括源代码和在副本中提到的文件读取时收到的错误消息。@Progman我已使用可能重复建议中的最新尝试更新了我的问题。我想我找到了答案out.I缺少getClassLoader()
。因此ConfigurationUtils.class.getResourceAsStream(“版本”);
应该是ConfigurationUtils.class.getClassLoader().getResourceAsStream(“版本”);