Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从依赖jar中查找本地资源?_Java_File_Jar_Classloader - Fatal编程技术网

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在哪里?我建议您将它放置在相对于类路径的位置,这样就可以在类加载器的某个位置找到它。我已经添加到我的位置。你能举例说明你的建议吗?