资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java中定位资源的方法有哪些

java中定位资源的方法有哪些?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为兴和企业提供专业的做网站、网站制作兴和网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

java定位资源的方法:1、通过【Class.getResource()】定位类路径下的资源;2、通过【ClassLoader.getResource()】定位包的根目录下的资源。

java中定位资源的方法有哪些

java定位资源的方法:

1, 通过Class.getResource()定位类路径下的资源(bin/com/bbebfe/icons/sample.gif)

Class clazz = this.getClass();
URL url = clazz.getResource(imageName);

2, 通过ClassLoader.getResource()定位包的根目录下的资源(bin/icons/sample.gif)

Class clazz = this.getClass();
URLClassLoader loader = (URLClassLoader)clazz.getClassLoader();
URL url = loader.getResource(imageName);

3, 通过ClassLoader.findResource()提供自己定制的方式定位资源

URL url = loader.findResource(imageName);

那么这三种方法有那些区别, 我们应该在何时使用哪种方法呢?

1、Class.getResource()方法

该方法实际通过该Class的Class Loader的getResource()方法来获得资源, 在调用ClassLoader的getResource()方法之前, Class.getResource()方法会对资源名称做一定的处理,构建一个该资源的绝对名称absolute name, 大意是:

+ 如果资源名称以'/'('/u002f') 开始, 则资源的绝对名称是'/'以后的部分.

如果imageName是"/icons/sample.gif", 则在这里会变成"icons/sample.gif"

+ 否则对于其他情况, 绝对名称将是如下形式(给资源名称的前面加上modified_package_name/):

modified_package_name/resource_name (修正的包名称/资源名称)

其中修正的包名称含义是将当前对象所在的包名称中的'.'('/u002e')替换为'/'

如果ClassLoader.getResource()方法返回一个值为null的URL, 则Class.getResource()方法最终会将资源请求交给ClassLoader.getSystemResource(java.lang.String).

2、ClassLoader.getResource()方法

该对资源进行查找, 资源的名称是以'/'分隔的路径, 这个方法首先查找自己的父亲ClassLoader, 由自己的父ClassLoader来查找资源(实际上, 如果父亲的父亲不是空, 则父亲仍会向上提交查找请求). 如果自己的父ClassLoader是null, 则查找Java虚拟机中内建的class loader, 并将资源请求提交给它们, 如果这些操作都失败了, 则ClassLoader会调用自己的findResource()方法来查找资源.

3、ClassLoader.findResource()方法

该方法在内部查找指定的资源, 如果你实现了自己的Class Loader,则应该重载这个方法以自己特定的方式来查找类文件和资源.

感谢各位的阅读!看完上述内容,你们对java中定位资源的方法有哪些大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注创新互联行业资讯频道。


网站名称:java中定位资源的方法有哪些
URL标题:http://www.cdkjz.cn/article/ijcgcd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220