1. 程式人生 > 實用技巧 >Java_web專案中在Java檔案裡面通過類裝載器對資原始檔讀取

Java_web專案中在Java檔案裡面通過類裝載器對資原始檔讀取

承接上一節:在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) throws
ServletException, 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"));
    }
    
}