我有一個J2EE應用程序作爲EAR文件部署,而EAR文件又包含用於業務層代碼(包括一些EJB)的JAR文件和用於Web層代碼的WAR文件。 EAR文件被部署到JBoss 3.2.5,它解壓縮EAR和WAR文件,但不包括JAR文件(這不是問題,僅僅是供參考)。在EAR中獲取JAR文件的絕對路徑?
JAR文件中的一個文件是MS Word模板,其絕對路徑需要傳遞給某些本地MS Word代碼(使用Jacob,FWIW)。
的問題是,如果我試圖獲得這樣的文件(從JAR文件中的一些代碼中):
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document
...那麼java.io.File
構造函數拋出拋出:IllegalArgumentException「URI不分層」。該URL和URI都具有相同的toString()輸出,即:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
這多路徑的是在文件系統上有效,但不休息(即內部的JAR文件):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
獲取此文件絕對路徑的最簡單方法是什麼?
當我發現這個問題,我的第一想法是「是的,也許唯一的辦法是寫一個臨時文件!」。令人驚訝的是,這是唯一的方法!怎麼可能無法在jar中處理路徑?如果你能得到流,你可以在完美的世界中獲得文件。 – 2011-03-10 16:00:55