資源訪問介面 由於JDK提供的資源訪問類並不能很好的滿足底層資源的訪問需求,所以Spring設計了一個Resource介面。Spring框架使用Resource裝載各種資源,包括配置文件資源、國際化屬性文件資源等 Resource具體的實現類圖 Resource介面的主要方法 1. boolean ...
資源訪問介面
由於JDK提供的資源訪問類並不能很好的滿足底層資源的訪問需求,所以Spring設計了一個Resource介面。Spring框架使用Resource裝載各種資源,包括配置文件資源、國際化屬性文件資源等
Resource具體的實現類圖
Resource介面的主要方法
- boolean exists():判斷資源是否存在
- boolean isOpen:判斷資源是否打開
- URL getURL() :該方法返回底層資源對應的URL
- File getFile():該方法返回底層對應的一個文件
- InputStream getInputStream():該方法返回資源對應的輸入流
Resource介面的實現類
WritableResource:可寫資源,是Spring 3.1提供的介面,有 三個實現類,即PathResource,FileSystemResource和FileUrlResource,其中PathResource從Spring 5.1.1開始遺棄,更傾向於與使用FileSystemResource。
ByteArraResource:二進位數組表示的資源,二進位數組資源可以在記憶體中通過程式構造
ClassPathResource:類路徑下的資源,資源以相對類路徑的方式表示
FileSystemResource:文件系統資源,資源以文件系統路徑的方式表示
InputStreamResource:以輸入流返回表示的資源
ServletContextResource:為訪問web容器上下文中得資源而設計的類,負責以相對於web應用根目錄的路徑載入資源,支持以流和URL的方式訪問,在WAR解包的情況下,亦可以通過File方式訪問,還可以直接從JAR包中訪問資源
UrlResource:URL封裝了java.netURL,它使用戶能夠訪問任何可以通過URL表示的資源,如文件系統的資源,HTTP資源,FTP資源等。
Resource載入資源代碼
用戶可以根據自己的需要,選擇合適的Resource實現類來訪問資源。
採用ClassPathResource()載入資源
public class ResourceMain {
public static void main(String[] args) throws Exception{
Resource resource=new ClassPathResource("resource/conf.txt");
InputStream inputStream = resource.getInputStream();
ByteArrayOutputStream bts=new ByteArrayOutputStream();
int i;
while ((i=inputStream.read())!=-1){
bts.write(i);
}
System.out.println(bts.toString());
System.out.println(resource);
}
}
資源載入
Spring提供了一個強大的載入資源機制,不但能夠通過“classpath:”、“file”等資源地址首碼識別不同的資源類型,還支持Ant風格帶通配符的資源地址。
資源地址表達式
地址首碼 | 示例 | 對應的資源類型 |
---|---|---|
classpath: | classpath:conf/conf.xml | 從類路徑中載入資源,classpath:和classpath:/是等價的,都是相對於類的根路徑。資源文件可以在標準的文件系統中,也可以在JAR或ZIP的類中。 |
file | file:/conf/conf.xml | 使用UrlResource從文件系統目錄中裝載資源,可以用絕對路徑或相對路徑 |
http:// | http://www.example.com/conf.xml | 使用UrlResource從web伺服器中裝載資源 |
ftp:// | ftp://www.example.com/conf.xml | 使用UrlResource從FTP伺服器中裝載資源 |
沒有首碼 | conf/conf.xml | 根據ApplicationContext的具體實現類採用對應類型的Resource |
同時資源載入還支持Ant風格的資源地址
Ant風格的資源地址支持3中匹配
?:匹配文件名中的一個字元
*:匹配文件中的任意字元
**:匹配多層路徑
如下示例:
classpath:com/con?.xml:匹配com路徑下的com/conf.xml、com/cont.xml等文件
classpath:com/*.xml:匹配com路徑下的所有的xml文件
classpath:com/**/a.xml:匹配com路徑下其他文件夾下的所有的a.xml文件
資源載入器
Spring定義的一套資源載入的介面:如下
ResourceLoader:的getResource(String location)方法,根據一個資源的地址載入文件資源。下麵PathMatchingResourcePatternResolver是Spring提供的標準實現類
public class PathMatchingResourcePatternResolverMain {
public static void main(String[] args) throws Exception{
ResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
Resource resource [] = resolver.getResources("classpath*:**/*.txt");
for (Resource resource1 : resource) {
System.out.println(resource1.getDescription());
}
}
}
上面代碼,PathMatchingResourcePatternResolver將會掃描所有類路徑下及JAR包中對應的以.txt結尾的尾碼資源文件。