我正在尝试读取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;
}
答案 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