Java工具包:资源访问器

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

内容简介: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工具包:资源访问器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

网络是怎样连接的

网络是怎样连接的

[日]户根勤 / 周自恒 / 人民邮电出版社 / 2017-1-1 / CNY 49.00

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。 本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从......一起来看看 《网络是怎样连接的》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

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

HEX HSV 互换工具