2012-02-10 49 views
0

首先,如果標題的描述不像應該的那樣抱歉,但很難用這種簡短的方式解釋它。Web應用程序中使用的JAR文件上的相對路徑

我有一個Java應用程序(非網絡),它必須從屬性文件讀取。這個Java應用程序也必須作爲JAR文件導出,然後用於Web應用程序,但屬性文件不在JAR文件中。它應該是這樣的:

/webapps/MyWebApp/WEB-INF/myJavaApp.jar 
/webapps/MyWebApp/WEB-INF/config.properties 

因此,編碼將被導出爲myJavaApp.jar的Java應用程序時,我不能做,所以它會從一個相對路徑讀取config.properties文件。如果我把絕對路徑它正常工作:

properties.load(new FileInputStream("C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/MyWebApp/WEB-INF/config.properties")); 

但是,如果我嘗試使用相對路徑它不起作用。我從這裏或其他網頁嘗試過不同的解決方案,但都沒有工作。

差不多忘了,我正在閱讀屬性文件的類是靜態的!

如果有人可以對此有所瞭解,將不勝感激。

謝謝先進。

回答

0

如果你確定該文件在classpath上,那麼你可以簡單地使用YourClassName.class.getResourceAsStream("/config.properties")加載它。這將是實施它的最簡單方法。 對於您的Web應用程序,您將該文件放入WEB-INF/classes/,對於獨立應用程序,只需在啓動應用程序時設置類路徑即可。

+0

它正在工作!我添加了'../../../ config/config.properties',以便將屬性文件放在Web應用程序目錄的頂部。現在的問題是,配置文件的任何修改需要重新啓動Tomcat以應用:(。有沒有什麼辦法可以避免這種情況?因爲當我使用絕對路徑時,我可以在運行中修改配置文件」。謝謝 – Jinka 2012-02-10 12:13:41

+0

你不想使用相對路徑'../../../ config/config.properties'。類路徑(或者可能是一個子目錄)是這個資源生存的理想場所。 – 2012-02-10 13:58:54

+0

至於Tomcat必須重啓,也許它使用'antiResourceLocking',導致一切都被複制到其他地方? – 2012-02-10 14:00:21

0

在Java應用程序,你可以得到由當前目錄的絕對路徑:

System.getProperty("user.dir"); 

假設你有config.properties駐留在同一目錄下,你應該能夠找出該文件的絕對路徑在你的java代碼中,你可以在任何地方部署它,而不需要在你的代碼中硬編碼絕對路徑。

編輯:

如果你的Java應用程序是一個可執行的JAR,上面的命令將返回只有直接調用它正確的目錄。如果您從另一個進程間接調用此應用程序,則在Windows平臺上,起始目錄將爲windows/system32,因此您必須分析您的jar是如何被調用的。如果後者是這種情況,最好在您的Web應用程序中添加功能以向您的屬性文件的路徑提供jar。

+0

它在測試Java應用程序時起作用,但一旦它作爲JAR導出並執行到Web應用程序中,它就不起作用。不管怎麼說,還是要謝謝你!導出到JAR的 – Jinka 2012-02-10 12:11:18

+0

不應該改變結果,可能的原因是你從哪裏執行這個jar的參考。您的相對路徑很可能來自該參考。由於你的文件不是JAR本身的一部分(新的FileInputStream) – Johnydep 2012-02-10 12:53:23

+0

我試圖把config.properties放在我能想到的ANY目錄中,但它不工作。我不知道爲什麼,我想我做錯了什麼:/ – Jinka 2012-02-10 13:06:55

相關問題