读取jar包内部配置文件信息的解析
?
讀取jar文件內部的配置信息是在進行開發基于java程序組件時必然會遇到的問題,這里所遇到的問題是在開發測試和部署(也就是將程序打成jar包之后供其他組件調用)時往往會不一致。也就是開發的時候我們的代碼可以訪問到配置文件信息,但是一旦打成jar包之后往往會遇到“FileNotFoundException”,也就是無法找到配置文件。下面看一個示例。
?
?
這是一個測試項目,項目的結構如圖所示,現在需要在Main.java類中讀取conf.properties文件中的信息。
不一致行為
如果我們在代碼中使用下面的語句
?
那么我們打成jar包之前運行程序是可以讀取到所要信息,但是打成jar包之后必然會遇到“FileNotFoundException”。而如果使用下面的代碼
?
那么無論是打包之前還是之后都會遇到“FileNotFoundException”的異常!
正確的做法
這時,無論是在打jar包之前還是之后都可以正確讀取conf.properties文件中的信息!
原因分析
上面兩種截然不同的結果產生的原因是我們使用的FileInputStream和getResourceAsStream()方法的差異所造成的!所以原因也必然在于FileInputStream和getResourceAsStream()的不同。
根據JDK中的表述,FileInputStream是基于當前JVM所在的OS,在文件系統指定的路徑中進行查找要求的資源。而ClassLoader類的getResourceAsStream()方面的描述如下:
| ? public InputStream getResourceAsStream(String name) getResource(String) 的文檔中描述了搜索順序。 參數:資源名稱是以 '/' 分隔的標識資源的路徑名稱。 此方法首先搜索資源的父類加載器;如果父類加載器為 null,則搜索的路徑就是虛擬機的內置類加載器的路徑。如果搜索失敗,則此方法將調用 findResource(String) 來查找資源。 ? ? |
Manifest-Version: 1.0
Class-Path: .
Main-Class: com.webex.app.Main
這里的“.”代表當前路徑,是一個相對路徑,但是它相對的是一個“虛擬路徑”,也就是jar或*.class文件加載到JVM后的“路徑”!
?
轉載于:https://blog.51cto.com/zorro/869765
總結
以上是生活随笔為你收集整理的读取jar包内部配置文件信息的解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spi master vhd timin
- 下一篇: Install GIT in Ubunt