Java Classloader没有加载xml文件

时间:2016-02-18 13:11:33

标签: java xml classpath urlclassloader

我遇到的问题是类加载器无法加载类路径中的xml文件。

下面的代码首先打印类路径中存在的文件。接下来应该打印我想要加载的特定xml文件的位置(hbase-site.xml,它存在于类路径中)。

System.out.println("Displaying Class Loader URLs:-");

URLClassLoader ucl = ((URLClassLoader)Thread.currentThread().getContextClassLoader());

for (URL url : ucl.getURLs()) {
    System.out.println(url);
}

System.out.println("Reading hbase-site.xml from: " + ucl.getResource("hbase-site.xml"));

我得到的输出如下

Displaying Class Loader URLs:-
file:/D:/hbase-master/hbase-master/bin/
file:/D:/hbase-master/hbase-master/conf/hbase-site.xml
file:/C:/Program%20Files/Java/jdk1.8.0_51/lib/tools.jar
file:/D:/hbase-master/hbase-master/hbase-server/target/
Reading hbase-site.xml from: null

我可以看到hbase-site.xml正在类加载器URL列表中输出。

但是getResource()方法无法找到hbase-site.xml文件 - 它返回null。我希望它输出'file:/ D:/hbase-master/hbase-master/conf/hbase-site.xml'。我无法理解这一点。请帮助。

PS:

  1. 由于我不理解的原因,即使在调用程序时设置了类路径,System.getenv(“java.class.path”)也会返回null。
  2. 文件名看起来有点奇怪,因为我在Windows上使用Cygwin。但是我已经证实这不是问题。我能够加载一个存在于jar文件中的文件(jar文件在classpath中)。

1 个答案:

答案 0 :(得分:0)

getResource方法需要"类路径相对名称"。检查