从不同目录级别的另一个包中获取文件

时间:2014-10-01 13:38:08

标签: java resources

此问题可能之前已经得到解决,但我似乎无法使其发挥作用。尝试了几个不同的先前提出的问题和答案。

我在资源包中有一个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();
    }

无论我尝试什么,它都会不断抛出空值。

更新: 快照: Class View

Class Package List

Error View

任何解决方案。

1 个答案:

答案 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。我会使用绝对路径。