2013-05-20 66 views
0

我已經花了過去3晚瘋了試圖找到這個答案。 所以我有一個Java程序,我希望它是一個jar格式,我希望它能夠讀取文本和圖像文件。
我得到的圖像文件使用this.getClass.getResource("")方法工作正常,但是我無法讓程序正確訪問.jar中的文本文件,當我解壓縮jar時,文本文件在那裏,所以我知道它不是不是罐子
jar文件沒有正確找到文件

本中的文本文件的簡單錯誤是什麼,我嘗試使用,但它沒有工作(它的工作原理沒有一個罐子,但現在一個罐子內)

URL lurl = this.getClass().getResource("list.txt"); 
BufferedReader in3 = new BufferedReader(new FileReader(lurl.getFile())); 

修復?

+1

什麼是你錯誤的堆棧跟蹤看起來像你必須把資源作爲一個InputStream,而不僅僅是另一個文件可以打開使用的FileReader。 – whatnick

+0

不確定你的意思,你在說這種方法嗎? this.getClass()。getResourceAsStream(「filename」); –

+0

是的,使用getResourceAsStream – greedybuddha

回答

1

假設你的類是

my.package.MyClass 

方法將從目錄/my/package從JAR讀取文件。

您可以通過打開資源:

BufferedReader in3 = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("list.txt"))); 
+0

好吧非常感謝你,我現在正在工作,但現在唯一的問題是,我不能將此代碼應用於其他部分我的程序,因爲它只將它作爲輸入流,我將如何處理輸出流? 的BufferedWriter OUT2 =新的BufferedWriter(新OutputStreamWriter(this.getClass()的getResourceAsStream( 「LIST.TXT」)); out2.write(a1.getText()); out2.close(); –

+0

你不能以這種方式寫入jar文件,你可以嘗試打開它作爲zip文件,但是試圖修改由ClassLoader加載的jar可能會導致不可預知的行爲(假設操作系統允許這樣的操作)。 –