【发布时间】:2017-11-07 22:53:07
【问题描述】:
我正在开发一个普通的 java 库 (jar),其中包含一些静态文件,我将它们放入 src/main/resources。这些静态文件用于执行算法并将处理后的数据返回给用户。
public String getStringFromFile(String fileName) {
String text = "";
try {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
Scanner scanner = new Scanner(file);
text = scanner.useDelimiter("\\A").next();
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return text;
}
到目前为止一切顺利。但是,当我尝试在 Android 项目中使用这个库/方法时,我得到:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.net.URL.getFile()”
我希望我的静态资源文件与库一起发布。难道我做错了什么?有什么想法吗?
【问题讨论】:
-
classLoader.getResource(fileName).getFile()没用。它应该返回给您与fileName相同的值,并且不会指向您可以使用的任何内容。您可以尝试getResourceAsStream()看看它是否有效,但这种 JAR 资源很少在 Android 上使用(如果有的话)。 -
@CommonsWare
getResourceAsStream()也不起作用 - 它返回 null。这真的很令人失望,因为我不想仅仅因为 android 在类路径上找不到静态文件就创建 *.aar :( -
我试图反编译生成的apk,我试图加载的文件就在那里。奇怪的是,Android把它放到了根目录下的
unknown文件夹中..
标签: java android jar resources classpath