在实际工作开发中,往往会遇到要从resource 目录里读取文件的需求, 我这里总结了三种方式。
- Classloader 读取。 比较适合单个文件的读取。
InputStream inputStream = StudentAddBean.class.getClassLoader().getResourceAsStream("avro/User.avsc");
Assert.notNull(inputStream);
String str = IOUtils.toString(inputStream, "utf-8");
System.out.println("method 1: \n" + str);
- 使用guava library里的Resource 类
URL uri = Resources.getResource("avro/User.avsc");
Assert.notNull(uri);
String str2 = Resources.toString(uri, Charsets.UTF_8);
System.out.println("method 2: \n" + str2);
- 使用spring里的PathMatchingResourcePatternResolver 类, 也是我个人最喜欢的一种方式,适合批量读取文件。
PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resourcePatternResolver.getResources("avro/**/*.avsc");
Stream.of(resources).forEach(resource -> {
try {
String str3 = IOUtils.toString(resource.getInputStream(), "utf-8");
System.out.println("method 3: \n" + str3);
} catch (Exception e) {
e.printStackTrace();
}
});
网友评论