概述
由来
资源(Resource)在Hutool中是一个广泛的概念,凡是存储数据的地方都可以归类到资源,那为何要提供一个如此抽象的接口呢?
在实际编码当中,我们需要读取一些数据,比如配置文件、文本内容、图片甚至是任何二进制流,为此我们要加入很多的重载方法,比如:
read(File file){...}
read(InputStream in){...}
read(byte[] bytes){...}
read(URL url){...}
等等如此,这样会造成整个代码变得非常冗余,查找API也很费劲。其实无论数据来自哪里,最终目的是,我们想从这些地方读到byte[]或者String。那么,我们就可以抽象一个Resource接口,让代码变得简单:
read(Resource resource){...}
用户只需传入Resource的实现即可。
定义
常见的,我们需要从资源中获取流(getStream),获取Reader来读取文本(getReader),直接读取文本(readStr),于是定义如下:
public interface Resource {
String getName();
URL getUrl();
InputStream getStream();
BufferedReader getReader(Charset charset);
String readStr(Charset charset);
}
关于Resource的详细定义见:Resource.java
定义了Resource,我们就可以预定义一些特别的资源:
BytesResource
从byte[]中读取资源InputStreamResource
从流中读取资源StringResource
从String中读取资源UrlResource
从URL中读取资源FileResource
从文件中读取资源ClassPathResource
从classpath(src/resources下)中读取资源WebAppResource
从web root中读取资源MultiResource
从多种资源中混合读取资源MultiFileResource
从多个文件中混合读取资源
当然,我们还可以根据业务需要自己实现Resource接口,完成自定义的资源读取。
为了便于资源的查找,可以使用
ResourceUtil
快捷工具来获得我们需要的资源。