gpt4 book ai didi

java - 如何从依赖的 jar 访问资源文件?

转载 作者:行者123 更新时间:2023-11-30 01:38:39 26 4
gpt4 key购买 nike

我有一个 android 应用程序,它有一个我创建的依赖库,通过编译 {artifact_name} 在 build.gradle 中引用。该库需要访问其资源目录(src/main/resources)中的资源文件。这是我想要完成但无法完成的:

URL url = helper.class.getClassLoader().getResource("myfile.json");
FileReader fr = new FileReader(url.getPath());

myfile.json 位于我的库的 src/main/java/resources 中。这导致应用程序崩溃,并在尝试创建 FileReader 时提示“jar:file:/data/app/com.my.app/base.apk!/myfile.json”未找到。

但是,如果我在库本身的客户端类中运行它,则可以找到它。

最佳答案

已更新(我还有更多时间给出完整答案)

在你的情况下,辅助类的 ClassLoader 可以访问你的文件(这就是为什么你得到 "jar:file:/data/app/com.my.app/base. apk!/myfile.json" 在你的 FileReader 实例中)。

FileReader 不理解完全限定的 URL(仅 URL 具有方案 file:或没有任何方案,但您有外部方案 jar: - 可从 jar 文件访问的文件)。

在这种情况下要读取数据,您应该1使用InputStreamReader的组合和 Class.getResourceAsStream :

ClassLoader cl = helper.class.getClassLoader();
InputStream is = cl.getResourceAsStream("myfile.json");
Reader r = new InputStreamReader(is);

PS 在通常情况下,您不需要直接访问 ClassLoader - Class 将自行访问它。只有极少数情况下才应该使用对 ClassLoader 的访问,在这种情况下,您应该非常清楚地理解 ClassClassLoader我发现了一些有用的信息:Classes 方法(getResourcegetResourceAsStream)仅在同一包中检查文件,而 ClassLoader的方法检查(另外)在根路径(因为我记得其中一些在两个地方都检查,今天我检查了类不检查 jar 文件的根)。

关于java - 如何从依赖的 jar 访问资源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com