加载资源文件" class="reference-link">加载资源文件

1. 概念" class="reference-link"> 1. 概念

存放在 /src/main/resources 目录或子目录下的文件是资源文件. 除了 ActFramework 需要的文件, 比如配置文件, 路由表等, 应用可以定义自己的资源文件, 并通过 @LoadResource 注解加载到程序中:

  1. public class Foo {
  2. @LoadResource("name.list")
  3. private List<String> nameList;
  4. }

上面的代码指令 ActFramework 将 resources/name.list 文件读取到 List<String> nameList 中, 每一行读取为 nameList 列表中的一个元素.

2. 从文本资源中加载" class="reference-link"> 2. 从文本资源中加载

ActFramework 支持从文本资源中加载到以下数据结构:

  • 字符串
  • 字符串列表 (每一行加载为列表中的一个元素)
  • Properties - 从 .properties 文件资源中加载
  • Map - 从类 .properties 文件资源中加载
  • List
  • 任意类型 - 从 JSON 或者 yaml 文件中加载

<a name=”load-text-into-string> 2.1 将文本资源加载到字符串

任何类型文本资源都可以加载到字符串:

  1. // snippet s2.1
  2. @LoadResource("myfile.txt")
  3. private String myStr;

<a name=”load-text-into-string-list> 2.2 将文本资源加载到字符串列表

任何类型文本资源都可以加载到 List<String> 数据结构, 该资源的每一行加载为字符串列表中的一个元素:

  1. // snippet s2.2
  2. @LoadResource("myfile.txt")
  3. private List<String> myLines;

2.3 将文本资源加载到 Properties 结构" class="reference-link"> 2.3 将文本资源加载到 Properties 结构

后缀名为 “.properties” 的资源文件可以加载进 Properties 类型数据中:

  1. // snippet s2.3
  2. @LoadResource("foo.properties")
  3. private Properties foo;

2.4 加载文本到 Map 结构" class="reference-link"> 2.4 加载文本到 Map 结构

任何类似 properties 文件内容的文本 (包括 .properties 文件) 都可以加载进 Map 类型数据:

  1. // snippet s2.4a
  2. @LoadResource("foo.properties")
  3. private Map<String, Object> foo;

如果文本中的值是特定类型, 你可以声明为该类型. 假设你的文本文件 int_values.txt 内容如下:

  1. # s2.4b
  2. one=1
  3. two=2

你可以使用下面的方式类声明 Map 类型参数:

  1. // snippet s2.4c
  2. @LoadResource("int_values.txt")
  3. private Map<String, Integer> intValues;

2.5 加载文本到 List 结构" class="reference-link"> 2.5 加载文本到 List 结构

在文本中每一行都可以转换为某个特定类型的情况下,可以将文本加载到非字符类型的 List 结构中, 例如资源文本为:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

可以加载到 List<Integer> 中:

  1. @LoadResource("int.list")
  2. private List<Integer> intList;

2.6 加载 JSON 资源" class="reference-link"> 2.6 加载 JSON 资源

JSON 资源内容可以加载到任何符合文件内容结构的数据中:

resource file: chracters.json

  1. // snippet s2.6a
  2. [
  3. {
  4. "username": "jamesbond",
  5. "level": 32
  6. },
  7. {
  8. "username": "ethanhunt",
  9. "level": 30
  10. },
  11. {
  12. "username": "jasonbourne",
  13. "level": 29
  14. }
  15. ]

The java POJO class

  1. // snippet s2.6b
  2. @Data
  3. public class Character implements SimpleBean {
  4. public String username;
  5. public int level;
  6. }

Load the characters into a list of Characters

  1. // snippet s2.6c
  2. @LoadResource("characters.json")
  3. private List<Character> characters;

2.7 加载 YAML 资源" class="reference-link"> 2.7 加载 YAML 资源

和 JSON 资源相似, YAML 资源也可以加载到任何符合文件内容结构的数据中:

resource file: chracters.yml

  1. # snippet s2.7a
  2. - username: jamesbond
  3. level: 32
  4. - username: ethanhunt
  5. level: 30
  6. - username: jasonbourne
  7. level: 29

The java POJO class

  1. // snippet s2.7b
  2. @Data
  3. public class Character implements SimpleBean {
  4. public String username;
  5. public int level;
  6. }

Load the characters into a list of Characters

  1. // snippet s2.7c
  2. @LoadResource("characters.yml")
  3. private List<Character> characters;

3. 从二进制资源中加载" class="reference-link"> 3. 从二进制资源中加载

ActFramework 支持从任何资源(包括二进制资源)中加载到以下数据结构:

  • byte[]
  • java.nio.ByteBuffer
  • java.nio.file.Path
  • java.net.URL
  • java.io.File
  • java.io.InputStream
  • java.io.Reader
  • org.osgl.storage.ISObject

  1. // snippet s3a
  2. @LoadResource("myFile.pdf")
  3. private ISObject myStorageObject;
  4. @LoadResource("myFile.pdf")
  5. private File myFile;
  6. @LoadResource("myFile.pdf")
  7. private byte[] myFileBlob