此问题可能之前已经得到解决,但我似乎无法使其发挥作用。尝试了几个不同的先前提出的问题和答案。
我在资源包中有一个XML模式文件,需要从另一个名为ui的包中将其作为File对象。
这里必须设置相对路径的问题,但我无法弄清楚如何修复它。
Class pacakge: COM / ABC / UI / myClass.java
资源包: COM / ABC /资源/模式/ XMLSchema.xsd
示例代码:
File schemaFile = null;
try {
schemaFile = new File(getClass().getClassLoader().getResource("../resources/schema/XMLSchema.xsd").getFile());
} catch (Exception e) {
e.printStackTrace();
}
和/或
File schemaFile = null;
try {
schemaFile = new File(getClass().getResource("../resources/schema/XMLSchema.xsd").getFile());
} catch (Exception e) {
e.printStackTrace();
}
无论我尝试什么,它都会不断抛出空值。
更新: 快照:
任何解决方案。
答案 0 :(得分:1)
有两种方法可以通过类或类加载器来使用资源。
班级:
SomeClass.class.getResource("/com/abc/resources/schema/XMLSchema.xsd")
类加载器
getClass().getClassLoader().getResource("com/abc/resources/schema/XMLSchema.xsd")
差别很容易看出:类加载器使用绝对路径搜索类路径,几个罐子。
类的getResource必须以绝对路径的斜杠开头,并且相对于类的包(目录)。由于继承getClass()
可能指向子类包,所以要小心。
在你的情况下,尝试更直接(jar限制)getClass().getResource
。我会使用绝对路径。