Java 如何从依赖jar中查找本地资源?
我已经编写了一个打包到Java 如何从依赖jar中查找本地资源?,java,file,jar,classloader,Java,File,Jar,Classloader,我已经编写了一个打包到1.jar的代码 使用此代码: return isProd? "/etc/waze/automation/devices.json": DeviceRepositoryFromJsonFile.class.getClassLoader().getResource("devices.json").getPath().toString(); devices.json位于以下位置: 我还有一个项目依赖于1.jar 但是,classLoader找
1.jar的代码
使用此代码:
return isProd? "/etc/waze/automation/devices.json":
DeviceRepositoryFromJsonFile.class.getClassLoader().getResource("devices.json").getPath().toString();
devices.json位于以下位置:
我还有一个项目依赖于1.jar
但是,classLoader
找不到本地devices.json
文件,而是一个打包在jar中的文件
无论如何,它表明该文件不存在
我怎样才能解决这个问题?无论如何,只需使用绝对路径?它不会直接回答您的问题,但它可以更快地解决您的问题 据我所知,您试图检测json文件的绝对路径,并将其传递给另一个方法,以便处理该文件。相反,可以做得更简单:
public byte[] getDevicesJsonBytes() {
return isProd
? IOUtils.toByteArray(ABSOLUTE_PATH_TO_PROD_FILE)
: IOUtils.toByteArray(DeviceRepositoryFromJsonFile.class.getResourceAsStream(RESOURCE_CLASSPATH);
}
读取类路径资源的常用方法是在
class
或classLoader
实例上使用getResourceAsStream
。此外,许多框架都有自己的资源抽象,但我想您现在不需要它们。如果在您的屏幕截图中,devices.json位于src/main/resources中,并且包已成功地将其作为包路径并放入jar文件根目录,那么您可以通过以下方式找到该文件:
DeviceRepositoryFromJsonFile.class.getResource("/devices.json");
请注意“/”斜杠很重要,它表示要从类路径的根进行搜索。local devices.json在哪里?我建议您将它放置在相对于类路径的位置,这样就可以在类加载器的某个位置找到它。我已经添加到我的位置。你能举例说明你的建议吗?