Java工具包:资源访问器

栏目: Java · 发布时间: 5年前

内容简介:Java *.class 编译文件构成了 Java 程序,而 Java 程序则通过 classpath 能够访问到 class 文件。一个 Java 程序,classpath 位置可以不止一个,而保存 class 的介质也不止一种,磁盘文件系统,jar 包甚至 zip 包这些介质都可以让 Java 程序读取,classpath 只是 JVM 对于其程序抽象的一个文件访问系统罢了。每个位置都可以用 URL 来描述,不同的位置之间用分号分隔。特别地,JVM 程序能访问的不仅仅是 *.class,还可以是非 c

Java *.class 编译文件构成了 Java 程序,而 Java 程序则通过 classpath 能够访问到 class 文件。一个 Java 程序,classpath 位置可以不止一个,而保存 class 的介质也不止一种,磁盘文件系统,jar 包甚至 zip 包这些介质都可以让 Java 程序读取,classpath 只是 JVM 对于其程序抽象的一个文件访问系统罢了。每个位置都可以用 URL 来描述,不同的位置之间用分号分隔。

特别地,JVM 程序能访问的不仅仅是 *.class,还可以是非 class 文件,于是我们可以称其“资源文件”。同样,他们可以在目录,或者打包到 jar 包里面中,只要定义为 classpath 可以访问的位置即可。

本文提到的完整源码在 : https://gitee.com/sp42_admin/ajaxjs-base/tree/master/src/main/com/ajaxjs/io/resource, 它是 AJAXJS 框架 的一部分。

AbstractScanner 资源扫描器

扫描器的原理不复杂,首先是对输入的 Java 包名例如 com.foo.bar 转为 URL 对象。

Java工具包:资源访问器

然后得到 URL 集合的 Enumeration 枚举类型,——因为包名下面可能多个目录的。最终如上述所见,分别对 file、jar、zip 得到的资源进行处理,交由子类的覆写方法决定是否需要这些的资源。具体怎么判断是否需要该资源我们下面再讲。

AbstractScanner 是一个抽象类,泛型 T 是欲查找的目标类型。符合条件的资源保存在一个 set 之中。LinkedHashSet 是 Set 集合的一个实现,具有 set 集合不重复的特点,具有可插入的顺序的特定,比较适合当前场景。

条件过滤

扫描器可以扫描任何保存在 classpath 的东西,当然一般情况下我们都是有特定范围的查找。于是 fileFilter 就被派上用场了。

抽象类 AbstractScanner 抽象以下三个方法,

Java工具包:资源访问器

怎么给出实现呢?这里以 ScanClass 为例子,说明查找只是 *.class 编译文件。

Java工具包:资源访问器

这样就收集了 class 的路径。注意只是 String 类型的资源路径。而 AbstractScanner 这里期待的类型是 Class,于是就有一个 path 转换为 Class 类型的过程,由实现方法 onFileAdding/onJarAdding 完成。

Java工具包:资源访问器

查找任意类型

前面例子是 Class,且有特定的 Java 给泛型 T 所使用——如果查找的资源是 *.txt 文件,能否呢?答案是肯定,这时我们把 T 声明为 Object,然后 FileFilter 改为判断 txt 后缀即可。下面是完整的实现。

Java工具包:资源访问器

查找特定的类

前面我们提到有 ScannClass,用得比较多的是其静态方法:

Java工具包:资源访问器

可见 Object 作为泛型参数就可以表示不同类型的 class。现在我们缩窄下范围,只要求 IController 类型的 Class。

Java工具包:资源访问器

通过 class 的 isAssignableFrom() 方法可得知该类是否实现了 class 接口。


以上所述就是小编给大家介绍的《Java工具包:资源访问器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Collective Intelligence实战

Collective Intelligence实战

阿拉克 / 2010-9 / 58.00元

《Collective Intelligence实战》内容简介:在互联网上,利用用户的集体智慧是成功的关键。集体智慧是一种新兴的编程技术,可让您从人们访问web和与web交互的过程中找到有价值的模式、发现这些访问者之间的关系和确定他们的个人偏好及习惯等。《collective Intelligence实战》首先介绍了集体智慧的原则和构建更具交互性网站的思想,然后通过示例开发了一个直接可用的基于Ja......一起来看看 《Collective Intelligence实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具