`
hxdawxyhxdawxy
  • 浏览: 125901 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Class.getResource与Class.getClassLoader.getResource

    博客分类:
  • java
 
阅读更多

转自网络


这两个getResource()是使用当前ClassLoader加载资源(即资源在 Class path中),这样资源和class直接打在jar包中,避免文件路径问题.两者不同是Class的getResource()方法是从当前.class 文件路径查找资源,ClassLoader则是从jar包根目录查找.
Class.getResource()
public java.net.URL getResource(String name)查找带有给定名称的资源.查找与给定类相关的资源的规则是通过定义类的 class loader 实现的.此方法委托给此对象的类加载器.如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String).
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:
ClassLoader.getResource()
public URL getResource(String name)查找具有给定名称的资源.资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等). 资源名称是以 ‘/’ 分隔的标识资源的路径名称.
此方法首先搜索资源的父类加载器;如果父类加载器为 null,则搜索的路径就是虚拟机的内置类加载器的路径.如果搜索失败,则此方法将调用 findResource(String) 来查找资源.
两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径.
在使用Class.getResourceAsStream 时,资源路径有两种方式,一种以/开头,则这样的路径是指定绝对路径,如果不以/开头,则路径是相对与这个class所在的包的.
在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径.

 

project

     |-src
          |-com.xx.test

                       |-Main.java

                       |-b.bmp

     |-resource

           |-com.icon

                       |-a.bmp

 

  
Main.class.getResource("/icon/a.bmp"); // NOT icon/a.bmp
Main.class.getResource("b.bmp");
// need to add resource/a.bmp to build path! it will be package in jar file
Main.class.getClassLoader().getResource("icon/a.bmp");
// NOT /icon/a.bmp or a.bmp
Thread.currentThread().getContextClassLoader().getResource("icon/a.bmp");

 

分享到:
评论
1 楼 malson 2014-04-17  

相关推荐

    Java路径问题解决方案汇集

     URLTest.class.getClassLoader().getResource().getPath();  Thread.currentThread().getContextClassLoader().getResource().getPath();等多种相似方式获得的路径,不能被FileReader()和FileWriter()直接应用...

    sax解析util

    URL url = Configuration.class.getClassLoader().getResource(filename); String str = url.getFile(); // 转换编码 str = URLDecoder.decode(str, "utf-8"); File conf = new File(str); ...

    Digester解析xml

    Digester digester = DigesterLoader.createDigester(TestDigester.class.getClassLoader().getResource(Constants.CONFIG_MAPPINGRULE_PATH)); digester.setValidating(false);

    java自定义弹窗Demo

    Icon icon = new ImageIcon(ConfirmDialog.class.getClassLoader().getResource("info.png")); ScaleIcon scaleIcon = new ScaleIcon(icon); JLabel iconLabel = new JLabel(scaleIcon); iconLabel....

    properties资源文件utils类

    String filepath = ContentMessage.class.getClassLoader().getResource("") .getPath(); filepath = filepath.substring(0, filepath.length() - 8); filepath = filepath + "resource/Application...

    testng-parser:TestNG解析器

    ClassLoader cl = TestTestNGParser.class.getClassLoader();URL url = cl.getResource("com/tupilabs/testng/parser/testng-results.xml");File file = new File(url.getFile());List<Suite> suites

    经典java小程序源代码合集.zip

    Image white= tk.getImage(cl.getResource("res/white.png")); Image black= tk.getImage(cl.getResource("res/black.png")); Image title= tk.getImage(cl.getResource("res/title.png")); Image temp; ...

    Java开发的小游戏 仿坦克大战

    im=tk.getImage(Tree.class.getClassLoader().getResource("images/dor.gif")); } public void draw(Graphics g) { if(!live) return; g.drawImage(im, x, y, null); if(r.nextInt(40) > 38){ //...

    dom4j-jdom封装和解析例子

    String fromRead=Dom4jTest2.class.getClassLoader().getResource("xml/map1.xml").getPath(); List<Pois> list=new ArrayList(); SAXReader saxReader = new SAXReader(); org.dom4j.Document document=...

    java五子棋源码

    Image white= tk.getImage(cl.getResource("res/white.png")); Image black= tk.getImage(cl.getResource("res/black.png")); Image title= tk.getImage(cl.getResource("res/title.png")); Image temp; JPanel...

    Socket聊天室源程序

    public class ChatClient extends JFrame implements ActionListener{ String ip = "127.0.0.1";//连接到服务端的ip地址 int port = 8888;//连接到服务端的端口号 String userName = "匆匆过客";//用户名 int ...

    ViewPager 放大缩小左右移动

    public class ViewPager extends ViewGroup { private static final String TAG = "ViewPager"; private static final boolean DEBUG = false; private static final boolean USE_CACHE = false; private ...

Global site tag (gtag.js) - Google Analytics