Java_web專案中在Java檔案裡面通過類裝載器對資原始檔讀取
阿新 • • 發佈:2020-12-05
承接上一節:在eclipse完成對Java_web專案裡面資原始檔的讀取
我們首先在src目錄下建立一個資原始檔db.properties
內容如下:
url=127.0.0.1 name=root password=root
之後我們建立一個繼承於HttpServlet的Java檔案
package test; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletContextDemo2 */ @WebServlet("/ServletContextDemo2") //注意有了這個就不需要往web.xml檔案裡面新增路徑對映public class ServletContextDemo2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { // TODO Auto-generated method stub UserDo user = new UserDo(); user.update(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
UserDo類:
package test; import java.io.InputStream; import java.util.Properties; public class UserDo { private static Properties dbconfig = new Properties(); //採用靜態程式碼塊的方式載入配置檔案資訊。配置檔案資訊載入一次就可以了,所以使用靜態程式碼塊 static { //使用類裝載器來實現 //類裝載器會把src的所有Java檔案都載入,那麼src的資原始檔也會被載入,所以就可以通過這種方式 //來獲取檔案內容。又因為db.properties在src目錄下,所以路徑直接寫檔名就可以了 try { InputStream in = UserDo.class.getClassLoader().getResourceAsStream("db.properties"); dbconfig.load(in); }catch(Exception e) { //向上丟擲異常 throw new ExceptionInInitializerError(e); } } public void update() { // TODO Auto-generated method stub System.out.println(dbconfig.getProperty("url")); } }
這樣就可以在Java檔案內讀取資原始檔資訊。但是要注意類裝載器只會執行一次,什麼意思呢。
如果你執行伺服器之後,這個時候資原始檔已經被類裝載器裝載,儘管你改變了db.properties檔案內容,但是隻要你不重啟伺服器,那麼通過類裝載器訪問到的db.properties檔案內容還是之前的,並沒有更新。
如果你想要實時獲取資原始檔內容,程式碼如下:
只需要修改UserDo類程式碼:
package test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class UserDo { public void update() throws IOException { // TODO Auto-generated method stub Properties dbconfig = new Properties(); String path = UserDo.class.getClassLoader().getResource("db.properties").getPath(); FileInputStream in = new FileInputStream(path); dbconfig.load(in); System.out.println(dbconfig.getProperty("url")); } }