JDK提供的访问资源的类不能很好的满足各种底层的资源访问需求,因此Spring 设计了一个Resource 接口,它为应用提供了更强的底层访问能力。

       一、Resource 接口的主要方法

          ① boolean exists(); 用来判断资源是否存在

          ②  boolean isOpen() ; 用来判断资源是否打开

          ③ URL getURL() ;如果底层资源可以表示成 URL ,那么该方法可以返回一个 URL对象。

          ④ File getFile() ;如果底层资源对应着一个文件 ,那么该方法可以返回一个 File对象。

          ⑤ String getFilename(); 返回底层资源对应的文件名。

          ⑥ InputStream getInputStream() ;返回底层资源对应输入流。

        二、 Resource 接口的具体实现类

            下图是 Resource 接口的部分实现类 中的继承和实现关系

Java Resource类作用 java中resource对象_文件系统

① WritableResource 可写资源接口,FileSystemResource  PathResource 都是它的实现类。

② ByteArrayResource  可以对二进制数组资源进行访问,二进制数组资源可以在内存中通过程序构造。

③ ClassPathResource 类路径下的资源,资源以相对于类路径的方式表示

④ FileSystemResource 文件系统资源,资源以文件系统路径的方式表示。

⑤ InputStreamResource 已输入流返回表示的资源。

⑥ ServletContextResource 为访问Web 容器上下文中的资源而设计的类。负责以相对于Web 应用根目录的路径加载资源,它支持以流和URL的方式访问,在war 包解压的情况下,还可以通过File 方式访问。

⑦ UrlResource 使用户可以访问任何可以通过URL表示的资源,如 file 、http 、ftp

⑧  PathResource spring 4.0 提供的读取资源文件的新类。

String filePath = "D:/Program/CodesTest/spring_study/springIoC/src/main/resources/conf/file1.txt";
// 使用系统文件路径来加载文件
WritableResource res1 = new PathResource(filePath);
// 使用类路径来加载文件
Resource res2 = new ClassPathResource("conf/file1.txt");

// 使用 WritableResource 接口来写入资源文件
OutputStream stream1 = res1.getOutputStream();
stream1.write("你好欢迎".getBytes());
stream1.write("沙扬娜拉\n哈哈哈".getBytes());

// 使用resource 接口来读取资源
InputStream stream2 = res1.getInputStream();
InputStream stream3 = res2.getInputStream();

// 获取文件名
System.out.println("res1:"+res1.getFilename());

       三、 Spring 支持的资源类型地址前缀

① classpath:   从类路径加载资源,classpath: 和 classpath:/ 是等价的,都是相对于类的根路径,资源文件可以在 标准文件系统       中,亦可以在 jar 或者 Zip 的类包中。
② file : 使用URLResource 从系统目录中加载字眼,可以是绝对路径也可是相对路径。
③ http:// : 使用URLResource 从Web 服务器中装载资源
④ ftp://  使用URLResource 从Ftp 服务器中装载资源
⑤ 没有前缀  根据application 的具体情况来加载。
⑥classpath* : 如果多个jar包存在相同的报名,classpath 只会在第一个加载包中查找,其余的不查找,而 classpath* :  则会找全部的包。

        四、Spring 支持的几种Ant 风格的通配符

① ? 匹配路径中一个字符

② * 匹配路径中任意字符

③ **  匹配多层路径

       五、资源加载器

资源加载接口及其实现类

Java Resource类作用 java中resource对象_spring_02

          ResourceLoader 接口仅有一个 getResource方法。可以根据一个资源地址加载文件资源。不过资源地址仅支持带

资源类型前缀的表达式,不支持ant风格的资源路径表达式。ResourcePatternResolver 扩展了 ResourceLoader 接口,定义了一个新的接口方法, getResources ,该方法支持带资源类型前缀的表达式及支持ant风格的资源路径表达式,PathMatchingResourcePatternResolver 是spring 提供的标准实现类。

@Test
	public void getResources() throws IOException {
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		
		Resource[] resources = resolver.getResources("classpath*:com/spring/**");
		
		for (Resource resource : resources) {
			System.out.println(resource.getDescription());
		}
	}