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

查看所有标签

猜你喜欢:

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

理解专业程序员

理解专业程序员

(美)杰拉尔德·温伯格(GeraldM.Weinberg) / 刘天北 / 清华大学出版社 / 2006-7 / 25.00元

《理解专业程序员》通过行内专家的独特视角,介绍了如何成为优秀程序员,如何提高工作绩效等问题。全书由多篇讨论程序员职业的短文组成,内容精彩绝伦,是一部任何在这个变化急剧的领域工作的人都不可错过的重要作品。本书论述生动翔实——你肯定能从中认出你自己和你的公司的故事——因此不仅极富教益,而且读来也引人入胜。 各篇主题包括:对于专业程序员重要的若干问题,成为专业程序员的途径,在企业官僚体......一起来看看 《理解专业程序员》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换