推 PsMonkey:[泣] 感謝使用我提供的功能 T___T 02/08 14:21
> -------------------------------------------------------------------------- <
作者: Nt1 (用功點吧!) 看板: java
標題: Re: [蟲?] ClassLoader 和 讀取 jar 中的檔案的問題
時間: Wed Feb 8 06:12:48 2006
※ 引述《Nt1 (用功點吧!)》之銘言:
好吧…我剛剛在 javaworld 找到解決方法了,就…自問自答一下吧@@"
因為在 jar 中的檔案,(如txt),並沒有辦法建構出一個 File 物件來操作,
也就是說,不管用什麼方式,只要這個 txt file 在 jar 中,就沒有辨法用
File = new File(xxxxx); 的方式來產生,這時候…可以用 ClassLoader 中的
getResourceAsStream("filename") 來把這個txt file當成一個 stream 來處理,而不是
File物件,再用 InputStreamReader 來接這個 stream 就可以了^^
如:
ClassLoader cl = this.getClass().getClassLoader();
InputStreamReader inr = new InputStreamReader
(cl.getResourceAsStream("images/01.txt"));
BufferedReader br = new BufferedReader(inr);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.145.131
問題描述:包成 jar 後,讀取 jar 中的 .gif 和 .txt 的問題
嗯…該怎麼說呢,有點不太會表答…我的目錄結構如下:
c:\java\
|-----images\1.gif
|-----images\1.txt
|--readfile.class
這個 readfile 是一個 JFrame,裡面有只有一個 JLabel,label上面顯示 1.gif
然後用 System.out.println() 印出 1.txt 的內容,以上是我的環境。
在我包成 jar 前可以執行,但是我包成 jar 後,卻讀不到1.txt了
但 1.gif 可以正常顯示,我看網路上有些教學說到,要讀 jar 中的檔,要用
ClassLoader cl = this.getClass().getClassLoader();
cl.getResource() 的方式 <返回值是 URL>,以下是我 JLabel 和 File 的創造方式:
Icon saveIcon = new ImageIcon(cl.getResource("images/01.jpg"));
lbl = new JLabel(saveIcon);
File f = new File(cl.getResource("images/01.txt").toURI());
//因為 File 的建構子要接的是 URI,所以用 toURI() 轉了一次。
在包成 jar 前,此程式可以正常執行,結果也沒錯!但是包成 jar 後,卻出現以下的
錯誤訊息,該怎麼讓他正常顯示呢?
錯誤訊息:
Exception in thread "main" java.lang.IllegalArgumentException: URI is not
hierarchical
at java.io.File.<init>(Unknown Source)
at readfile.<init>(readfile.java:17)
at readfile.main(readfile.java:36)
程式碼:
//試一下版大的轉換程式
// 1.gif 和 1.txt 就不附上了^^
//也順便用一下版大最愛的 "7選項"
import java.io.*;
import java.net.*;
import javax.swing.*;
public class readfile extends JFrame{
JLabel lbl;
String content="";
public readfile()
{
super("test");
setSize(400,300);
ClassLoader cl = this.getClass().getClassLoader();
// Create icons
try{
Icon saveIcon = new ImageIcon(cl.getResource("images/01.jpg"));
File f = new File(cl.getResource("images/01.txt").toURI());
//line 17
BufferedReader br = new BufferedReader(new FileReader(f));
System.out.println(br.readLine());
lbl = new JLabel(saveIcon);
lbl.setBounds(300,300,50,50);
add(lbl);
lbl.setText(content);
show();
}catch(URISyntaxException e){
e.printStackTrace();
}catch(IOException ee){
ee.printStackTrace();
}
}
public static void main(String args[])
{
readfile r =new readfile(); //line36
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.145.131
※ 編輯: Nt1 來自: 220.135.145.131 (02/08 03:48)