2008年7月31日 星期四

[JAVA] 讀取JAR裡面的文件

=====以下內容取自JavaWorld=======
http://www.javaworld.com.tw/jute/post/view?bid=5&id=38475&sty=3&age=0&tpg=1&ppg=1#38475

方法一:new ImageIcon(getClass().getClassLoader().getResource("image/fd.png"))

方法二:
import javax.swing.*;

public class Test {
public static void main(String[] args) {
JFrame f = new JFrame("test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Test test = new Test ();
ImageIcon aa = new ImageIcon(test.getClass().getResource("tw/folder.gif"));
JPanel p = new JPanel();
JLabel jb = new JLabel(aa);
p.add(jb);
f.getContentPane().add(p);
f.setBounds(100,100,400,400);
f.show();
}
}

另外Duncan提到:
透過一個 class 的 first class object(Class) 的 getResource method 取得資源,
所給定的資源路徑是相對於 class 的 package。
如果你使用 ClassName.class.getResource("tw/idv/sai/image/a.jpg") ,
那麼這張 a.jpg 必須在 ClassName 的 package 下的 tw\idv\sai\image 目錄裡。
如果使用 getClass().getResource("tw/idv/sai/image/a.jpg") ,
那麼要看 getClass() expression 所在的 scope 到底是指哪一個 instance,
這個 instance 所屬類別的 full-qualified name 所指出的那個目錄下,
必須有 tw\idv\sai\image 目錄裡頭放 a.jpg。

========以下內容取自PTT JAVA版========

文章代碼 #171nVtL 作者:psalter
補充一下
getClass().getResourceAsStream("config.properties");
是從目前class所在的目錄下讀取檔案,也就是檔案要跟class放在一起
如果用 getClass().getResourceAsStream("/config.properties");
會從class所屬的package最上層目錄去找檔案,例如 package為:
my.fun.ap 則會找 my/config.properties
至於要不要讓檔案跟class放在一起,那就需要評估看看了....

文章代碼 #171ns9Rc 作者:qrtt1

建議不要用 getClass()
統一寫成 YourClass.class.getResourceAsStream("/config.properties");
才可以放在 static/non-static 的 method 中

有興趣的可以去看那一串討論串!!

沒有留言: