0

我正在尝试读取 xsd 文件以验证架构。

我的架构在位置x/y/z/test.xsd

我读这个文件的班级也在x/y/z/ReadSchema.java

两者都包装在我的罐子里。

我正在尝试在ReadSchema.java下面的名称中读取此文件,test.xsd但 url 返回为空?

我在这里做错什么了吗?

  private static URL getURLForName(String name) 
  {
      ClassLoader cl = Thread.currentThread().getContextClassLoader();

      URL url = cl.getResource(name);
      return url;
  }
4

2 回答 2

2

您使用的名称是错误的。请记住:

getClass().getResource();

取一个相对于类的名称,而

getClass().getClassLoader().getResource();

采用绝对路径。

编辑:为什么我称它为绝对路径

所以,如果你的文件在 yourjar.jar!x/y/z.txt 并且你的类是 xyKlass

那么你可以去:

getClass().getResource("z.txt");

或者你可以这样做:

getClass().getClassLoader().getResource("/x/y/z.txt");
于 2013-04-22T08:05:41.027 回答
1

没有错,但 test.xsd 必须在您的 claspath 中。如果它在 Eclipse 中而不在 jar 中有效,则意味着您的 MANIFEST.MF 不正确。尝试在清单中添加以下行并再次创建 jar:

Manifest-Version: 1.0
Class-Path: . 

这是我的程序的代码之一:

URL config = SnapshotMigrationMain.class.getResource("/config_migration/log4jconfig.properties");

当然,您必须将文件导出到 jar 或相对于您的 jar 的子目录中。
以我为例:
migration.jar
/config_migration/log4jConfig.properties

于 2013-04-22T08:14:32.580 回答