Resources提供提供操作classpath路径下所有资源的方法。除非另有说明,否则类中所有方法的参数都不能为null。虽然有些方法的参数是URL类型的,但是这些方法实现通常不是以HTTP完成的;同时这些资源也非classpath路径下的。
下面两个函数都是根据资源的名称得到其绝对路径,从函数里面可以看出,Resources类 中的getResource函数都是基于java中ClassLoader类的getResource函数来实现的,只是Resources类中的 getResource函数给我们封装了ClassLoader对象的获取,使得用户不需要自己去获取ClassLoader对象。
public static URL getResource(String resourceName) { ClassLoader loader = Objects.firstNonNull( Thread.currentThread().getContextClassLoader(), Resources.class.getClassLoader()); URL url = loader.getResource(resourceName); checkArgument(url != null, "resource %s not found.", resourceName); return url; } public static URL getResource(Class<?> contextClass, String resourceName) { URL url = contextClass.getResource(resourceName); checkArgument(url != null, "resource %s relative to %s not found.", resourceName, contextClass.getName()); return url; }
上面两个函数处理完后都是返回URL类型的对象,第一个getResource函数中Objects.firstNonNull函数原型为
public static <T> T firstNonNull(@Nullable T first, @Nullable T second)
其实现如下:
public static <T> T firstNonNull(@Nullable T first, @Nullable T second) { return first != null ? first : checkNotNull(second); }
从其实现可以看出,firstNonNull函数返回其两个参数中首先不为null的对象;如若两个参数都为null,则该函数将会抛出类型为 NullPointerException异常。好了,再回到Resources类中来,上面的两个getResource函数返回的对象都是URL类型 的,而观察Resources类其他函数,都可以接受URL类型的参数,如下所示:
public static InputSupplier<InputStream> newInputStreamSupplier(URL url) public static ByteSource asByteSource(URL url) public static InputSupplier<InputStreamReader> newReaderSupplier(URL url, Charset charset) public static CharSource asCharSource(URL url, Charset charset) public static byte[] toByteArray(URL url) throws IOException public static String toString(URL url, Charset charset) throws IOException public static <T> T readLines(URL url, Charset charset, LineProcessor<T> callback) throws IOException public static List<String> readLines(URL url, Charset charset) throws IOException public static void copy(URL from, OutputStream to) throws IOException
下面分别介绍这些函数的用法:
InputSupplier<InputStream> inputStreamInputSupplier = Resources.newInputStreamSupplier(resource); InputStream input = inputStreamInputSupplier.getInput(); ByteSource byteSource = Resources.asByteSource(resource); InputStream inputStream = byteSource.openStream();
newInputStreamSupplier和asByteSource函数都是以字节形式来读取resource中的数据。可以看出,两个函数最后都可以转换成我们熟悉的InputStream来操作。
InputSupplier<InputStreamReader> inputSRS = Resources.newReaderSupplier(resource, Charsets.UTF_8); Reader input1 = inputSRS.getInput(); CharSource charSource = Resources.asCharSource(resource, Charsets.UTF_8); Reader reader = charSource.openStream();
newReaderSupplier和asCharSource函数都是以字符的形式来读取resource中的数据。同上面两个函数一样,这里说的两个函数都可以转换为Reader类操作。
byte[] bytes = Resources.toByteArray(resource); String string = Resources.toString(resource, Charsets.UTF_8);
上面两个函数可以直接将resource中的资源数据转换为字节数组和字符数组形式。
List<String> stringList = Resources.readLines(resource, Charsets.UTF_8); Lines lines = (Lines)Resources.readLines(resource, Charsets.UTF_8, new LineProcessor<Object>() { Lines lines = new Lines(); @Override public boolean processLine(String line) throws IOException { return lines.getStringList().add(line); } @Override public Lines getResult() { return lines; } });
Lines类定义
public class Lines { private List<String> stringList; public Lines() { stringList = Lists.newArrayList(); } public List<String> getStringList() { return stringList; } public void setStringList(List<String> stringList) { this.stringList = stringList; } @Override public String toString() { return stringList.toString(); } }
上面两个函数都是从resource中以Charsets.UTF_8字符集形式一行一行的读取里面的内容。第二个函数我们自己实现了LineProcessor callback类,可以看出,我们可以对读取到的每一个进行相应的处理,非常的方便。其 实,Resources.readLines(resource, Charsets.UTF_8);函数内部还是调用了readLines(URL url, Charset charset, LineProcessor callback)函数,其实现如下:
public static List<String> readLines(URL url, Charset charset) throws IOException { return readLines(url, charset, new LineProcessor<List<String>>() { final List<String> result = Lists.newArrayList(); @Override public boolean processLine(String line) { result.add(line); return true; } @Override public List<String> getResult() { return result; } }); }
最后一个要说的函数是copy(URL from, OutputStream to),这个函数可以将数据复制到所有OutputStream子类对象中,如下:
Resources.copy(resource, new FileOutputStream("/wyp.txt"));
上面代码将resource中的数据复制到wyp.txt文件中。(完)
相关推荐
包含翻译后的API文档:guava-17.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:17.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”...
guava-API文档
包含翻译后的API文档:guava-20.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:20.0; 标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-23.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:23.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-19.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:com.google.guava:guava:19.0; 标签:google、guava、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用...
包含翻译后的API文档:guava-27.0.1-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:27.0.1-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...
Guava 23.0 API CHM格式,可以搜索,方便离线查阅。
包含翻译后的API文档:guava-12.0.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:12.0.1 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-28.0-android-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:28.0-android; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...
NULL 博文链接:https://whnqwe.iteye.com/blog/2313173
赠送原API文档:guava-18.0-javadoc.jar 赠送源代码:guava-18.0-sources.jar 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:com.google.guava,...
包含翻译后的API文档:guava-16.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:16.0.1; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-30.0-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:30.0-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器...
Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 目前主要包含: com.google.common.annotations com.google.common.base com.google.common.collect ...
guava学习体系知识点的学习,归纳出来了知识点。根据知识点去学习可以快熟了解guava
包含翻译后的API文档:guava-25.0-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:25.0-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器...
guava19_api_chm英文文档
下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.google.com/p/guava-libraries 官方下载:http://code.google.com/p/guava-libraries/downloads/list 官方文档:...