我們在以前討論過在Web工程不能采用Java工程原先的讀取方式,即創建一個文件流(FileInputStream)並給出一個文件目錄(從src開始找一直找到你要讀取文件的目錄),這種的方式是不可行的。假如我們是在一個Servlet對象中取讀取文件的話,我們就可以獲取到ServletContext對象,然后通過getRealPath方法獲取文件的實際路徑,進而取創建文件流對象來操作文件,具體代碼如下所示:
//獲取文件的真實路徑 String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/jdbc3.properties"); //構建流對象 FileInputStream fis = new FileInputStream(filePath);
如果是在一個普通的Java類文件中,我們有時候也要它來操作文件,比如我們自己封裝的DBUtils,里面需要從配置文件中讀取數據庫的相關配置信息,用戶名、密碼等,但是,它是不能獲取到ServletContext對象的,也許有的朋友可能會想,你傳入一個ServletContext對象進去不就可以了。但是這樣做的話就不太合理,因為WEB層就侵入到了數據訪問層,就會耦合在一起,不符合軟件設計高內聚,低耦合的思想。所以這種方式是不推薦的,那么這種方式不行,那該怎么辦呢?所以,我們可以通過下面的方式進行讀取文件,來解決這一個問題。
1.讀取src目錄下的文件
①文件目錄
②讀取示例代碼:
package com.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class JdbcUtils { public static void readFile1() throws IOException { // 通過class類的getResourceAsStream方法來進行讀取jdbc1.properties,它讀的是當前類所在的目錄即WEB-INF/classes/com/util InputStream in = JdbcUtils.class.getResourceAsStream("jdbc1.properties"); Properties prop = new Properties(); prop.load(in); // 從控制台列出prop里面的信息 prop.list(System.out);
in.close(); } }
③運行結果:
-- listing properties --
jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.username=root
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.password=root
2.讀取src的包目錄下的文件
①文件目錄
②讀取示例代碼:
package com.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class JdbcUtils { public static void readFile2() throws IOException { // 通過類裝載器來進行讀取jdbc2.properties(文件不宜不過大,因為是通過加載類的方式去讀),它讀取的是目錄是WEB-INF/classes InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc2.properties"); Properties prop = new Properties(); prop.load(in); // 從控制台列出prop里面的信息 prop.list(System.out);
in.close(); } }
③運行結果:
-- listing properties --
jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.username=root
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.password=root
至此在web中普通Java類讀取文件的方式描述完畢,有不足的地方,希望大家多多提意見!