Java讀取Jar包裏的文件

Java的IO操做,一年也用不到一次,且每次用到都會有一堆問題。html

就Java路徑,用一次查一次。由於用的少,用完就忘。java

此次遇到一個奇葩問題。原本是一個很是簡單的Excel操做,讀取,填充數據。本地跑沒有一點問題,一打成jar包,發到服務器上,就在下面的語句報錯:服務器

this.sourceFileName = this.getClass().getResource("Book1.xls").toURI()
                    .getPath();

提示 找不到文件。
那麼咱們看看什麼是URI:this

Web上可用的每種資源 -HTML文檔、圖像、視頻片斷、程序等 - 由一個通用資源標識符(Uniform Resource
Identifier, 簡稱"URI")進行定位。.net

且根據規範,URI是這種形式地:協議名稱://域名.根域名/目錄/文件名.後綴
http://www.baidu.com/xxoo.html
那麼我麼利用上面的java語句得到的是什麼形式呢?
file://d:xx/xx/aa/bb.txt.
注意到沒,利用這種形式,能夠打開如上形式的某個目錄文件下的文件。
而對於jar包裏的文件,則已是文件的內部了,就已經無能爲力了。
也就是若是用上面方法,能夠打開到.../xx/xx.jar,而無法到.../xx/xx.jar/xx.txt了。code

那對於jar裏的文件是否是就無法打開了?確定不是:orm

InputStream inputStream = this.getClass()getResourceAsStream("Book1.xls"));

就這麼簡單,jar包裏的文件,咱們是無法以file形式讀取的,而只能以InputStram的形式讀取。視頻

推薦幾篇博文吧:
http://mushiqianmeng.blog.51cto.com/3970029/833649
http://www.coderli.com/jar-classloader
http://blog.csdn.net/b_h_l/article/details/7767829htm

相關文章
相關標籤/搜索