尝试在jar中读取文件时出错

时间:2013-04-22 08:02:51

标签: java file file-io io

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

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

位置

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

我的罐子里都有包装。

我正在尝试在ReadSchema.java中读取此文件,如下所示,其中name为test.xsd但是url返回为null?

我在这里做错了什么?

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

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

2 个答案:

答案 0 :(得分:2)

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

getClass().getResource();

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

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

采用绝对路径。

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

所以,如果您的文件位于yourjar.jar!x / y / z.txt中,并且您的类是x.y.Klass

然后你可以去:

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

或者你可以这样做:

getClass().getClassLoader().getResource("/x/y/z.txt");

答案 1 :(得分: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