知识大全 java资源获取分析
Posted 资源
篇首语:一个伟大的灵魂,会强化思想和生命。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 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 );
甜性涩爱下载 ?id=
那么在jdk中为什么又提供了三种方式来获取classpath下的资源呢?这其中是有些来头的
第一行代码中是利用Class类的实例来获取 第二行代码是使用加载当前类的classloader来获取 看下jdk中的源代码会发现class类的实例最后还是委托加载他的classloader来获取资源的
Java代码
public URL getResource(String name)
name = resolveName(name);
ClassLoader cl = getClassLoader ();
if (cl==null)
// A system class
return ClassLoader getSystemResource(name);
return cl getResource(name);
从上面的代码中可以看出 对于资源的加载并没有像类加载所采用的双亲委托机制 而是当前类的classloader不为null的情况下先从当前类的classloader中加载资源 而只有当前类的classloader为null的时候才从system classloader中去加载资源 这样可以方便我们自定义配置类覆蓋一些默认配置 当然 j se应用中如果没有特别定制classloader时 我们自己写的类都是被system classloader加载的 到底利用class去获取资源和利用classloader去获取资源有什么区别呢?区别就在 resolveName(name)这个方法中 两种方式对于资源名称的表示方式不同 下面是一个简单的包结构 /表示类路径的根
/
| test
| Test class
| test txt
| test txt
Java代码
// 获取与当前类在同一个包下的资源
URL url = this getClass() getResource( test txt );
// 获取 test包下的资源 需加/
URL url = this getClass() getResource( //cn/test/test txt );
// 获取类路径根下的资源
URL url = this getClass() getClassLoader() getResource( test txt );
// 获取包 test包下的资源
URL url = this getClass() getResource( /cn/test/test txt );
而第三利用当前线程的contextClassLoader来获取资源的解释可以参考我的另一篇
B 获取文件系统中的资源
Java代码
// 获得File对象
File file = new File( test txt );
// 获得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中就没有提供一个统一处理方式吗?有 URL
从名称上来看 URL(Uniform Resource Locator) 统一资源定位器 看起来很好很强大 但很多时候使用它并不能定位到我们需要的资源
首先 它jdk中体统的URL能访问的协议非常有限(当然可以进行扩展 不过很麻烦) 常用的有 file ftp等等 并没有提供对classpath和servletContext中的资源的获取方法
另外 它没有提供判断资源是否存在的方法 每次只有等我们真正去获取资源的时候抛出异常才能知道资源无法获取
cha138/Article/program/Java/hx/201311/26654相关参考
在Java中使用反射分析类结构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先要获取需要进行
JAVA获取绝对路径的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JAVA中获取绝对路径
java获取系统时间代码 Dated=newDate()  
Java获取随机时间 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! importjavatext
Java获取网络主机信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! InetAddress类
获取Java对象的大小 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
获取当前时间和某个时间进行比较此时主要拿long型的时间值 方法如下 要使用javautilDate获取当前时间的代码如下代码如下 Datedate=newDate(); da
Java获取窗口鼠标坐标以及键盘按键 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java中的
Java反射设置私有属性和获取属性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java代码
Java获取指定日期的实现方法总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Java中