book-content/%root/test-collection/enhanced-frontend/test-code-highlight.md

3.5 KiB
Raw Blame History

代码纯手打,没有经过 IDE 查错,如发现错误还请立即 issue

创建资源文件索引对象

要使用 ResourceTools首先需要建立一个 ResourcesPackage 对象,它是你的项目的资源文件的索引对象。

// 导入类
import cc.sukazyo.restools.ResourcesPackage;

/* ... */

//创建对象
ResourcesPackage pack = new ResourcesPackage(Test.class, "assets");

构造函数的第一个参数是一个 Class 对象,用于确定你的项目。 第二个参数是在项目文件为根目录的路径下,你的资源文件的位置。 一般来说在IDE等项目管理环境下一个项目的源文件路径如下

src
 ╠═main
 ║ ╟─java
 ║ ╙─resources
 ╚═test
   ╟─java
   ╙─resources

这个路径指的就是在{.lang-url}src/main/resources目录下的{.lang-url}assets文件夹。

获取资源文件

不同于 Java 中的 java.io.File{.lang-java} 的是ResourceTools 使用了文件和文件夹对象分离的方式因此ResourcesPackage 对象拥有以下两个 get 方法:

// 获取文件
public ResFile getResource (String path) throws IOException;

// 获取目录
public ResDir getResDir (String path) throws IOException;

前一个用于获取文件对象,后一个则是获取目录对象。 其中的 path 参数为文件/目录相对于设置的资源文件根目录("assetes")的位置。

例如如果一个项目的 resources结构如下

resources
 ╠═assets
 ║ ╟─propertes.io
 ║ ╚═lang
 ║   ╚═default.lang
 ╚═idn
   ╟─ios
   ╙─windows

若要获取default.lang文件,则使用以下方法:

/** 之前创建的资源文件索引类: 
 * ResourcesPackage pack = new ResourcesPackage(Test.class, "assets");
 */
pack.getResource("/lang/default.lang");

ResFile 使用

// 获取到一个文件
ResFile res = pack.getResource("/lang/default.lang");

InputStream ins = res.read(); // 获取到这个文件的流

String content = res.readAsString(); // 直接获取这个文件的纯文本字符串
                                     // 没有测试如果将其应用在非纯文本文件上的效果,
                                     // 同时 Sukazyo 认为也不会有硬读非纯文本文件的人
                                     // 硬读纯文本文件的话,后果请自负

ResDir 使用

// 获取到一个目录
ResFile res = pack.getResource("/");

ResFile[] reses = res.listFiles(); // 读取到直接属于这个目录下的文件
                                   // 不读间接属于目录的文件
                                   // 在这个例子中会读取到 properties.io

ResDir[] dirs = res.listDirs(); // 和上文类似,读取直接属于此目录的子目录
                                // 这个例子中会读到 lang 目录

File target = new File("./assets/"); // 一个 File 对象,指向的是程序运行目录下的 assets 子目录
res.extract(target, false); // 将这个目录下的所有文件和文件夹解压到目标目录中
                            // 会解压 properties.io  lang/  lang/default.lang
                            // 如果 target 目录不存在的话会创建这个目录
                            // 第二个参数决定是否覆盖已存在的文件true为覆盖false为不覆盖

res.extract(target); // 上一个方法的简略版
                     // 覆盖开关始终为 true