FileSystemResource 和 ClassPathResource 以及 ServletContextResource 獲取資源用法


FileSystemResource 和 ClassPathResource 是 java 中比較常見的兩個獲取資源的類。除了他們兩個之外,還有一個也比較常用。那就是 ServletContextResource。本文介紹他們三個的用法。

FileSystemResource 是 Spring 提供的資源訪問類。FileSystemResource 類相比其他兩個資源訪問類,沒有什么優勢,它只是在 File 類的基礎上略作封裝。

/*默認從文件系統的當前路徑加載xttblog.xml資源*/
FileSystemResource fsr = new FileSystemResource("xttblog.xml");

FileSystemResource 實例可使用 FileSystemResource 構造器顯示地創建,但更多的時候它都是隱式創建。執行 Spring 的某個方法時,該方法接受一個代表資源路徑的字符串參數,當 Spring 識別該字符串參數中包含file:前綴后,系統將會自動創建FileSystemResource 對象。

ClassPathResource 也是 Spring 框架提供的類。利用ClassPathResource讀取xml配置的基本思路就是通過構造函數傳入的文件路徑,接着交給class或者classLoader,調用getResourceAsStream獲取到InputStream。

FileSystemResource 和 ClassPathResource 的用法如下:

String filePath = "D:/com/xttblog.txt";
//使用系統文件路徑方式加載文件
Resource res1 = new FileSystemResource(filePath);
//使用類路徑方式加載文件
Resource res2 = new ClassPathResource("conf/xttblog.txt");
InputStream ins1 = res1.getInputStream();
InputStream ins2 = res2.getInputStream();
getFileName();//獲取文件名
getFile();//獲取資源對應的File對象
getInputStream();//獲取文件的輸入流
createRelative(String relativePath);//在相對地址創建新文件

EncodedResource encRes = new EncodedResource(res, "UTF-8");
String content = FileCopyUtils.copyToString(encRes.getReader());

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource resources[] = resolver.getResources("classpath*://com/***/*.xml");
For(Resource resource : resources){
   System.out.println(resource.getDescription);
}

ClassPathResource、 FileSystemResource、InputStreamResource、ServletContextResource、 UrlResource 的區別如下:

  • ClassPathResource 從系統的類路徑中加載 
  • FileSystemResource 從文件系統加載,比如說自己指定配置文件的全路徑 
  • InputStreamResource 從輸入流中加載 
  • ServletContextResource 從Servlet 上下文環境中加載 
  • UrlResource 從指定的Url加載

Class.getResource("")獲取的是相對於當前類的相對路徑。Class.getResource("/")獲取的是classpath的根路徑。ClassLoader.getResource("")獲取的是classpath的根路徑。

在創建ClassPathResource對象時,我們可以指定是按Class的相對路徑獲取文件還是按ClassLoader來獲取。

FileSystemResource 效果類似於Java中的File
ClassPathResource 效果類似於this.getClass().getResource("/").getPath();
ServletContextResource 效果類似於request.getServletContext().getRealPath("");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM