2012-07-13 167 views
9

從當前運行的JAR中提取文件是否有任何內置方法可用於允許用戶從當前運行的JAR中提取文件並將其保存在磁盤上?通過代碼

在此先感謝。

回答

8

使用getResourceAsStream (docs),之後你可以隨心所欲地做任何事情。

對於雙線,你可以使用one of the Commons IO copy methods

+0

的getResourceAsStream會給您可以訪問任何匹配的資源上類路徑,而不僅僅是一個帶有「當前正在運行的JAR」的文件,假定這是一個使用「java -jar 」執行的JAR文件。 – jarnbjo 2012-07-13 14:28:06

+0

@jarnbjo是的。如果資源沒有正確打包,這可能是一個問題,但考慮到這個問題,我認爲這個問題比需要從「運行jar」特別是來自所有其他資源打包完全一樣。 – 2012-07-13 14:32:10

+0

這樣做。謝謝! – Konstantin 2012-07-17 17:12:04

16
File file = new File("newname.ext"); 
if (!file.exists()) { 
    InputStream link = (getClass().getResourceAsStream("/path/resources/filename.ext")); 
    Files.copy(link, file.getAbsoluteFile().toPath()); 
} 
+0

請注意,某些Files.copy實現(java.nio.file.Files)不會關閉輸入流 - >可能的內存泄漏。 – Vity 2018-01-25 07:24:16