2013-04-22 193 views
0

我正在尝试读取xsd文件来验证模式。尝试读取jar文件时出错

我的模式是在位置x/y/z/test.xsd

我的课外阅读这个文件也是x/y/z/ReadSchema.java

两个有包装在我的罐子。

我想读取这个文件在ReadSchema.java像下面那样的名字是test.xsd但是url返回为null?

我在做什么错在这里?

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

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

回答

2

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

getClass().getResource(); 

需要相对于类名称,而

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

采用绝对路径。

编辑:!为什么我把它叫做一个绝对路径

所以,如果你的文件是yourjar.jar X/Y/z.txt和你的类是xyKlass

,那么你可以去:

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

,或者你可以这样做:

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

检查:http://stackoverflow.com/questions/14739550/what-is-the-difference-between-getclass-getclassloader- getresource-and-get – rmalchow 2013-04-22 08:06:11

+1

和这个:http://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream – rmalchow 2013-04-22 08:06:27

+0

我不确定我会称它为绝对的路径。 – maba 2013-04-22 08:14:18

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的子目录中。
随着我的例子:
migration.jar
/config_migration/log4jConfig.properties

相关问题