spring 07-Spring框架Resource读取不同资源

  • Spring开发框架专门提供了一组资源的处理接口:
    org.springframework.core.io.Resource

    (org.springframework.core.io.InputStreamSource子接口)

Resource接口主要是进行资源的数据读取

  • 内存读取(ByteArrayResource)
  • CLASSPATH读取(ClassPathResource)
  • 文件读取(FileSystemResource)
  • URL读取(UrlResource)
  • WEB上下文读取(ServletContextResource)

Resource接口提供了如下常用处理方法:

  • public boolean exists() --该资源是否存在
  • public default boolean isReadable() --该资源是否可读
  • public long contentLength() --获取内容长度
  • public long lastModified() --取得最后一次修改日期时间
  • public String getFilename() --取得文件名
  • public InputStream getInputStream() --取得输入流对象(父类org.springframework.core.io.InputStreamSource方法)

测试代码:

package cn.liang.demo;
import java.io.File;
import java.util.Scanner;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;

public class ResourceDemo01 {
	public static void main(String[] args) throws Exception {
		//内存操作流
		String info = "hello world liang" ;
		Resource resourceByte = new ByteArrayResource(info.getBytes()) ;
		print(resourceByte);
		
		//文件读取
		File file = new File("/etc/hosts");
		Resource resourceFile = new FileSystemResource(file) ; 
		print(resourceFile);
		
		//基于CLASSPATH的数据读取
		String classpath = "applicationContext.xml";
		Resource resourceClassPath = new ClassPathResource(classpath) ; 
		print(resourceClassPath);
		
		//读取URL
		String url = "http://www.baidu.com";
		Resource resourceUrl = new UrlResource(url) ;  
		print(resourceUrl);
	}
	
	public static void print(Resource resource) throws Exception{
		if (resource.exists()) {	// 表示该资源存在
			// Resource的父接口InputStreamResource只提供有getInputStream()方法,所以这个时候最好的读取使用Scanner
			Scanner scan = new Scanner(resource.getInputStream()) ;
			scan.useDelimiter(" ") ;
			while (scan.hasNext()) {
				System.out.println(scan.nextLine());
			}
			scan.close(); 
		}
		System.out.println("*********************");
	}
}

ResourceLoader接口

  • 简化Resource读取资源以及操作子类不通区分的需求
  • 接口路径:org.springframework.core.io.ResourceLoader
  • 可以使用org.springframework.core.io.DefaultResourceLoader子类实例化
  • ResourceLoader接口的getResource()方法可以接收一个表示资源路径的字符串数据
    • 读取文件系统资源:file:路径
    • 读取网络资源:http://路径
    • CLASSPATH读取:classpath:路径

测试程序:

package cn.liang.demo;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class ResourceDemo02 {
	public static void main(String[] args) throws Exception {
		//读取文件资源
		String filePath = "/etc/hosts";
		ResourceLoader loaderFile = new DefaultResourceLoader() ;
		Resource resourceFile = loaderFile.getResource("file:" + filePath) ; 
		print(resourceFile);
		
		//读取网络资源
		String Url = "http://www.baidu.com";
		ResourceLoader loaderUrl = new DefaultResourceLoader() ;
		Resource resourceUrl = loaderUrl.getResource(Url) ; 
		print(resourceUrl);
		
		//读取CLASSPATH资源
		String classpath = "classpath:applicationContext.xml";
		ResourceLoader loaderClassPath = new DefaultResourceLoader() ;
		Resource resourceClassPath = loaderClassPath.getResource(classpath) ; 
		print(resourceClassPath);
		
	}
	
	public static void print(Resource resource) throws Exception{
		if (resource.exists()) {
			Scanner scan = new Scanner(resource.getInputStream()) ;
			scan.useDelimiter(" ") ;
			while (scan.hasNext()) {
				System.out.println(scan.nextLine());
			}
			scan.close(); 
		}
		System.out.println("*********************");
	}
}
原文地址:https://www.cnblogs.com/liangjingfu/p/10059626.html