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文件中的资源信息:
- 访问其它资源
-
还可以想到一些访问资源的方法,例如从数据库中取得资源数据。