5.1. 資源概述
在一個稍具規模的應用程序中,經常要做的一件事,就是查找資源、讀取資源的內容。這裏所謂的“資源”,是指存放在某一介質中,可以被程序利用的文件、數據。例如,基於Java的WEB應用中,常用到下面的資源:
-
配置文件:
*.xml
、*.properties
等。 -
Java類文件:
*.class
。 -
JSP頁面、Velocity模板文件:
*.jsp
、*.vm
等。 -
圖片、CSS、JavaScript文件:
*.jpg
、*.css
、*.js
等。
在Java中,有多種形式可以表示一個資源:
表 5.1. 資源的表示
可表示資源的對象 | 說明 |
---|---|
java.io.File |
可代表文件系統中的文件或目錄。例如:
|
java.net.URL |
統一資源定位符。例如:
|
java.io.InputStream |
輸入流對象,可用來直接訪問資源的內容。例如:
|
然而,並不是所有的資源,都可以表現成上述所有的形式。比如,
-
Windows文件系統中的目錄,無法表現爲輸入流。
-
而遠程WEB服務器上的文件無法轉換成
File
對象。 -
多數資源都可以表現成
URL
形式。但也有例外,例如,如果把數據庫中的數據看作資源,那麼一般來說這種資源無法表示成URL
。
不同類型的資源,需要用不同的方法來訪問。
- 訪問CLASSPATH中的資源
-
將資源放在CLASSPATH是最簡單的做法。我們只要把所需的資源文件打包到Jar文件中,或是在運行java時,用
-classpath
參數中指定的路徑中。接下來我們就可以用下面的代碼來訪問這些資源: - 訪問文件系統中的資源
-
下面的代碼從文件資源中讀取信息:
- 訪問Web應用中的資源
-
Web應用既可以打包成war文件,也可以展開到任意目錄中。因此Web應用中的資源(JSP、模板、圖片、Java類、配置文件)不總是可以用文件的方式存取。雖然Servlet API提供了
ServletContext.getRealPath()
方法,用來取得某個資源的實際文件路徑,但該方法很可能返回null
—— 這取決於應用服務器的實現,以及Web應用的佈署方式。更好的獲取WEB應用資源的方法如下: - 訪問Jar/Zip文件中的資源
-
下面的代碼讀取被打包在Jar文件中的資源信息:
- 訪問其它資源
-
還可以想到一些訪問資源的方法,例如從數據庫中取得資源數據。