2012-11-05 242 views
1

我在創建加載資源的.jar時遇到了很多麻煩。 我看了很多帖子在這裏,但我沒有一個想法,我應該如何使用訪問JAR資源

this.getClass().getResourceAsStream(".."); 

我需要數據庫加載到內存:

File file = new File(Thread.currentThread(). 
getContextClassLoader().getResource("phonebook").getFile());       
String attachStmt = "ATTACH '" + file + "' AS tempInMemoryDb"; 
stmt.execute(attachStmt); 

所以,如果我從跑項目NetBeans它加載數據庫就好了,但是當我清理並構建並從dis文件夾運行jar文件時,我在命令行中看到電話簿文件(數據庫文件)未加載。所以,我的問題是:我應該如何使用this.getClass().getResourceAsStream("..")來創建文件並將其傳遞給"String attachStmt = "ATTACH '" + file + "' AS tempInMemoryDb";以便我可以加載數據庫?

回答

3

ATTACH需要一個文件作爲輸入,但是當您爲應用程序構建JAR時,所引用的文件位於此JAR內部,並且未提取!在這種情況下,您需要先將數據寫入文件。

通過調用File.createTemporaryFile創建一個空的臨時文件。使用this question的答案中描述的方法之一將從getResourceAsStream返回的流的內容複製到臨時文件中。

當您編程退出時,不要忘記刪除臨時文件。一種確保在第一步中返回的臨時文件對象上調用deleteOnExit的方法。

+0

是的,這個建議適用於我。謝謝。 – sekula87