2013-08-01 61 views
0

我有下面的问题: 我尝试从jar中加载文件,但我有相同的文件位于相同的相对路径:“res/rtrconfig”作为jar中的文件。我如何忽略外部文件并获取jar文件路径?我无法删除外部文件,因为我的代码的其他部分需要它。 我有什么至今:如何在Java之外的文件之前从jar中加载资源?

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
     URL url = loader.getResource(path); 
     //check if file is in jar or not 
     if (url == null) { 
      System.err.println("FATAL: Properties file not found.Stopping the server."); 
      System.exit(-1); 
     } 
     if (!url.getProtocol().equals("jar")){ 

      System.err.println("Properties found outside jars.Please delete " + url.getPath() + " and re-start the server"); 
      System.exit(-1); 
     } 

的代码检查这部分,如果该文件是建立在罐子或路径。 我不知道如何配置URL来查看路径中文件之前的jar文件。 谢谢你的时间。

+0

上面的代码返回什么?不是在jar中找到的资源吗?如果不是,你传递的路径的值和jar中的资源的全名是什么? –

+0

“在jars之外发现的属性。请删除”+这里是绝对路径+“并重新启动服务器”。 res \ rtrconfig是资源的名称 – nucandrei

回答

1

你可以得到所有资源

Enumeration<URL> urls = ClassLoader.getSystemClassLoader().getResources(path); 

文件URL将有“文件”协议

while (urls.hasMoreElements()) { 
     URL url = urls.nextElement(); 
     if (url.getProtocol().equals("file")) { 
      ... 
     } 
    } 
+0

谢谢。我正在朝这个方向前进,但我不知道该如何处理Enum :) – nucandrei

0

如果您使用的春天,这个将努力获得来自外部的jar的jar资源文件。

ClassPathResource resource = new ClassPathResource(“schema/feed.xsd”);