2013-08-01 98 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」);