`
wangdei
  • 浏览: 366436 次
社区版块
存档分类
最新评论

java资源获取分析

    博客分类:
  • JAVA
阅读更多
在开发java程序的过程中,我们经常要做的一件事就是获取资源。那么什么是资源呢?说白了,在计算机里那就是一堆数据。只是这堆数据对我们的java程序有多种表现形式,一般来说有File,URL,InputStream等等。而单就文件这一项就有很多种:配置文件,java类文件,jps文件,图片、css、js文件等等。面对这林林总总的资源,我们在设计一个读取资源的接口时,就需要针对不同形式的资源提供方法,这样就导致我们的接口还是与实际的资源形式绑定在一起,未能完全的抽象。另外,在java程序中资源的存放位置也是各异的。有的存放在classpath中,有的存放在文件系统中,有的存放在web应用中。而对于不同位置的资源,java程序获取这些资源的方法各有不同。
A、获取classpath中的资源:
Java代码
URL url = this.getClass().getResource("resource_name"); 
URL url = this.getClass().getClassLoader().getResource("resource_name"); 
URL url = Thread.currentThread().getContextClassLoader().getResource("resource_name"); 
甜性涩爱下载 http://www.bt285.cn/content.php?id=1196863
那么在jdk中为什么又提供了三种方式来获取classpath下的资源呢?这其中是有些来头的。
第一行代码中是利用Class类的实例来获取,第二行代码是使用加载当前类的classloader来获取。看下jdk中的源代码会发现class类的实例最后还是委托加载他的classloader来获取资源的。
Java代码
/**
* 色即是空2下载  http://www.bt285.cn/sejishikong/
爱的色放下载 http://www.bt285.cn/aidesefang/
*/
public java.net.URL getResource(String name) { 
    name = resolveName(name); 
    ClassLoader cl = getClassLoader0(); 
    if (cl==null) { 
        // A system class. 
        return ClassLoader.getSystemResource(name); 
    } 
    return cl.getResource(name); 


从上面的代码中可以看出,对于资源的加载并没有像类加载所采用的双亲委托机制。而是当前类的classloader不为null的情况下先从当前类的classloader中加载资源。而只有当前类的classloader为null的时候才从system classloader中去加载资源。这样可以方便我们自定义配置类覆盖一些默认配置。当然,j2se应用中如果没有特别定制classloader时,我们自己写的类都是被system classloader加载的。到底利用class去获取资源和利用classloader去获取资源有什么区别呢?区别就在 resolveName(name)这个方法中。两种方式对于资源名称的表示方式不同。下面是一个简单的包结构,/表示类路径的根
/
|-com.cn.test
   |-Test.class
   |-test2.txt 
|-test1.txt
Java代码
// 获取与当前类在同一个包下的资源 
URL url1 = this.getClass().getResource("test2.txt"); 
// 获取com.cn.test包下的资源,需加/ 
URL url2 = this.getClass().getResource("/com/cn/test/test2.txt"); 
// 获取类路径根下的资源 
URL url3 = this.getClass().getClassLoader().getResource("test1.txt"); 
// 获取包com.cn.test包下的资源 
URL url4 = this.getClass().getResource("com/cn/test/test2.txt"); 

而第三利用当前线程的contextClassLoader来获取资源的解释可以参考我的另一篇
B、获取文件系统中的资源
Java代码
// 1、获得File对象 
File file = new File("test.txt"); 
// 2、获得File对象的字节流 
InputStream in = new FileInputStream(file); 

值得注意的是在File的构造函数File(String name) 中的name参数可以是相对路径和绝对路径。相对路径是相对于System.getProperties("user.dir")的。
C、获取web应用中的资源
Java代码
servletContext.getResourceAsStream(resource_name); 

resource_names为相对于webroot的路径表示。例如获取web.xml,resource_name表示为"/WEB-INF/web.xml"

    面对上面介绍的各种资源表现形式和存放位置,难道java中就没有提供一个统一处理方式吗?有,java.net.URL。
从名称上来看 URL(Uniform Resource Locator) 统一资源定位器。看起来很好很强大。但很多时候使用它并不能定位到我们需要的资源。
    首先,它jdk中体统的URL能访问的协议非常有限(当然可以进行扩展,不过很麻烦);常用的有http,file,ftp等等。并没有提供对classpath和servletContext中的资源的获取方法。
    另外,它没有提供判断资源是否存在的方法。每次只有等我们真正去获取资源的时候抛出异常才能知道资源无法获取。
    其次,URL这个类的职责未划分清楚,既用来表示资源有用来获取其资源。
分享到:
评论

相关推荐

    Java资源包01

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    SunSolaris的JavaCore分析

    在Sun Solaris上Java默认是不生成OOM的JavaCore及Dump文件,本资源详细介绍了,如何在生产环境的运行时获取内存信息进行分析,定位问题。

    Java实现论文采集分析系统

    本系统可自动化地从论文索引数据库中获取机构的文献信息,通过设计的算法流程可对论文以及机构作者进行匹配,并能对本机构的学术成果按年度、学科、文献类别等不同维度进行统计与分析。系统同时提供了论文查收的流程...

    java获取百度网盘真实下载链接的方法

    主要介绍了java获取百度网盘真实下载链接的方法,涉及java针对URL操作及页面分析的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    读取分析Excel所有jar包和java示例文件

    本资源包换所有读取分析excel的jar包和我写的用这些包读取分析excel文件的两个.java文件。

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    基于 Java 使用 ARP 协议获取局域网内部活动主机的物理地址【100011074】

    首先寻找并打开适合的网络适配器,然后根据输入的局域网 IP 地址构造 ARP 的数据包,然后通过 Java 对网卡数据捕获需要用到 jpcap,jpcap 调用 wincap 实现数据包的发送,并监听返回的数据包,分析局域网内返回的...

    字符串-Java解题分析-学习资料.zip

    字符串-Java解题分析-学习资料.zip 是一个关于Java中字符串处理的解题分析和学习资料的压缩文件。该资源主要涵盖了Java中字符串的基本操作、常见算法和问题解析,旨在帮助开发者深入理解字符串在Java中的运用,提高...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java源码包4

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    基于Java实现的C语言编译器解释器(实现词法分析、语义分析、绘制图像与窗口建立等).zip

    1.根据题目要求,经过自己的分析,我在实现解释器的程序中,将总体过程分为4个阶段,分别为Scanner(词法分析)、Paerser(语法分析)、Semantic(语义分析)、Main(绘制图形与窗口建立),全过程采用JAVA语言、递归下降子...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java开源包8

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java源码包3

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    金蝶K3星空云获取报表查询 WEB API(成本计算单报表查询) JAVA版.rar

    7. 下载资源请慎重考虑。 8. 本人保证此贡献的代码为报表查询的核心代码,足以反映报表查询的基本思路,即接口请求和返回数据解析,解析为实体类。 9.核心代码类文件:BaseService.java、IJdCostManageService.java...

    基于Java的共享学习资源系统的设计与实现【附源码】

    本系统将采用JDBC技术实现Java程序与SQL Server之间的链接,可以通过程序来对数据库进行学生共享学习资源、学生查询学习资源、管理员对学习资源增删改查等操作。 (4)JavaScript JS具有跨平台特性,在绝大多数...

    基于JAVA JSP网上教学资源共享系统的毕业设计,使用JAVA JSP技术开发,并采用MySQL数据库进行数据存储

    学生可以通过关键字搜索资源,并通过下载或在线观看的方式获取资源。 ## 在线讨论功能 系统将提供一个在线讨论板块,使用户可以在相关主题上进行交流和讨论。教师也可以在此板块上发布公告和课程安排。 ## 数据...

    java8集合源码分析-java666:Java男孩的百宝箱

    集合源码分析 Java 百宝箱 1.学习规划 技术日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的。 网上的资料多如牛毛,但是很多时候我们缺的不是一个资料,而是一个学习规划! ...

    java源码包2

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    基于Java的飞机大战游戏系统

    在本系统实现过程中,综合处理了多态 、接口–interface 、final关键字、继承等问题,开发技术上包括资源包的导入、图片流等,具体包括问题分析、方案设计、系统实现等多个方面,通过对Java基本原理的分析,重点解决...

Global site tag (gtag.js) - Google Analytics