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

时间:2016-01-15 00:51:59

标签: java android gradle

我有一个android应用程序,它有一个我创建的依赖库,在build.gradle中通过compile {artifact_name}引用。库需要访问其资源dir(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”。

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

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,帮助者类ClassLoader可以访问您的文件(这就是您在"jar:file:/data/app/com.my.app/base.apk!/myfile.json"实例中获得FileReader的原因。)

但是FileReader不了解完全限定的URL s(只有URL的方案file:或没有任何方案,但你有外部方案{ {1}} - 可从jar文件访问的文件。)

要在这种情况下阅读数据,您应该使用InputStreamReaderClass.getResourceAsStream的组合:

jar:

PS 在您不需要直接访问ClassLoader cl = helper.class.getClassLoader(); InputStream is = cl.getResourceAsStream("myfile.json"); Reader r = new InputStreamReader(is); 的常见情况下,ClassLoader会自行访问它。只有极少数情况下才能使用Class访问权限,在这种情况下,您应该非常清楚ClassLoader es和Class 我发现了一些有用的信息:ClassLoader es方法(ClassgetResource)仅检查同一个包中的文件,而getResourceAsStream方法检查(另外)根路径(因为我记得他们中的一些人在这两个地方进行了检查,今天我检查了那个班级没有检查jar文件的根目录。)