1. 程式人生 > >java中讀取配置檔案的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目錄

java中讀取配置檔案的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目錄

配置檔案位於 /src/ 下的情況已經由上述博主列出,需要的可以移步檢視,即以下幾個情況

1.路徑:src/aa.xml

2.位於src下同一個包下

3.位於src下不同包

不過本博主的專案是web專案,而配置檔案放在src檔案下容易因為快取導致更新不及時,

所以我把配置檔案放在了 /WebContent/WEB-INF/ 資料夾下,可以放在其它非web專案情況也可以放在 /cfg/ 

此時配置檔案就不在src資料夾下了

所以就要直接用到檔案流

InputStream is = new FileInputStream(System.getProperty("user.dir") + "/WebContent/WEB-INF/" + resource);

注意這裡需要配置System.getProperty("user.dir")所得的工作目錄:

步驟:右鍵任意工程,“Debug As”,子選項“Debug Configurations...”,彈出視窗:

Debug Configuration
Debug Configuration

點選第二個標籤“Arguments”,

Arguments
Arguments

找到最下面的“Working directory:”,一般初始為Default,如果不符合所需也可以自行設定Other,博主用的是“Variables”中的“project_path”

Variables
Variables

這其中還有很多別的實用變數可以自行選擇。

我是在使用mybatis時,編寫工具類MybatisJDBC用到的new FileInputStream

獲取配置檔案,我的配置檔案mybatis-config.xml在/WebContent/WEB-INF/下:

public class MybatisJDBC
{

/**
     * 獲取SqlSessionFactory
     * @return SqlSessionFactory
     */
    public static SqlSessionFactory getSqlSessionFactory()
    {
        String resource = "mybatis-config.xml";
        SqlSessionFactory factory = null;
        try
        {
            InputStream is = new FileInputStream(
                    System.getProperty("user.dir") + "/WebContent/WEB-INF/" + resource);


            // System.out.println(MybatisJDBC.class.getClassLoader().getResourceAsStream(resource)); //null
            factory = new SqlSessionFactoryBuilder().build(is);
        }
        catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return factory;
    }

}

不過,如果你的配置檔案在/src/下也可以這樣:(反正博主得到的是null啦,因為不在/src/下)

public class MybatisJDBC
{

/**
     * 獲取SqlSessionFactory
     * @return SqlSessionFactory
     */
    public static SqlSessionFactory getSqlSessionFactory()
    {
        String resource = "mybatis-config.xml";
        InputStream is =MybatisJDBC.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        return factory;
    }

}