spring工具类
关键字: spring 的优秀工具类盘点
?
对于位于远程服务器(Web 服务器或 FTP 服务器)的文件资源,您则可以方便地通过 UrlResource 进行访问。
为了方便访问不同类型的资源,您必须使用相应的 Resource 实现类,是否可以在不显式使用 Resource 实现类的情况下,仅根据带特殊前缀的资源地址直接加载文件资源呢?Spring 提供了一个 ResourceUtils 工具类,它支持“classpath:”和“file:”的地址前缀,它能够从指定的地址加载文件资源,请看下面的例子:
清单 2. ResourceUtilsExample
static Properties loadProperties(Resource resource)
从 Resource 中加载属性static void fillProperties(Properties props, Resource resource)
将 Resource 中的属性数据添加到一个已经存在的 Properties 对象中特殊编码的资源
当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。
清单 5. EncodedResourceExample
package com.baobaotao.io;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.EncodedResource;import org.springframework.util.FileCopyUtils;public class EncodedResourceExample { public static void main(String[] args) throws Throwable { Resource res = new ClassPathResource("conf/file1.txt"); // ① 指定文件资源对应的编码格式(UTF-8) EncodedResource encRes = new EncodedResource(res,"UTF-8"); // ② 这样才能正确读取文件的内容,而不会出现乱码 String content = FileCopyUtils.copyToString(encRes.getReader()); System.out.println(content); }}
?
EncodedResource 拥有一个 getResource() 方法获取 Resource,但该方法返回的是通过构造函数传入的原 Resource 对象,所以必须通过 EncodedResource#getReader() 获取应用编码后的 Reader 对象,然后再通过该 Reader 读取文件的内容。