【JavaEE】讀取配置檔案路徑的幾種方式

Windsor90發表於2017-02-06

讀取配置檔案的各種方式

1.類載入器讀取:

只能讀取classes或者類路徑中的任意資源,但是不適合讀取特別大的資源。
①獲取類載入器 ClassLoader cl = 類名.class.getClassLoader();
②呼叫類載入器物件的方法:public URL getResource(String name);
此方法查詢具有給定名稱的資源,資源的搜尋路徑是虛擬機器的內建類載入器的路徑。
類 URL 代表一個統一資源定位符,它是指向網際網路”資源”的指標。
資源可以是簡單的檔案或目錄,也可以是對更為複雜的物件的引用.
URL物件方法:public String getPath(),獲取此 URL 的路徑部分。
示例程式碼:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {          
        ClassLoader cl = ServletContextDemo.class.getClassLoader();//得到類載入器
        URL url = cl.getResource("cn/edu/c.properties");
        String path = url.getPath();
        InputStream in = new FileInputStream(path);
        Properties props = new Properties();
        props.load(in);
        System.out.println(props.getProperty("key"));
    }  

2.類載入器讀取:

只能讀取classes或者類路徑中的任意資源,但是不適合讀取特別大的資源。
①獲取類載入器 ClassLoader cl = 類名.class.getClassLoader();
②呼叫類載入器物件的方法:public InputStream getResourceAsStream(String name);
返回讀取指定資源的輸入流。資源的搜尋路徑是虛擬機器的內建類載入器的路徑。

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        ClassLoader cl = ServletContextDemo.class.getClassLoader();//得到類載入器
        InputStream in = cl.getResourceAsStream("cn/edu/c.properties");
        Properties props = new Properties();
        props.load(in);
        System.out.println(props.getProperty("key"));
    }

3.ResourceBundle讀取:只能讀取properties的檔案。

ResourceBundle讀取的檔案是在classpath路徑下,也就是src或者src目錄下。我們在專案中需要打包,
打包後的properties檔案在jar中,修改很不方便,我們需要把properties檔案放在jar外隨時可以修改。
這樣打包後可以直接修改properties檔案。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //配置檔名為c.properties在包cn.edu下。      
        ResourceBundle rb = ResourceBundle.getBundle("cn.edu.c");
        System.out.println(rb.getString("key"));
    } 

4.利用ServletContext可以讀取應用中任何位置上的資源。

侷限性:只能在web應用中用

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String path = getServletContext().getRealPath("/WEB-INF/classes/cn/edu/c.properties");  
        InputStream in = new FileInputStream(path);
        Properties props = new Properties();
        props.load(in);
        System.out.println(props.getProperty("key"));
    }

相關文章