java中读取配置文件的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目录

https://blog.csdn.net/u012557538/article/details/50317663 这篇文章介绍了一些关于通过getResourceAsStream来获取配置文件的情况。

配置文件位于 /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...”,弹出窗口:

java中读取配置文件的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目录
Debug Configuration

 

点击第二个标签“Arguments”,

java中读取配置文件的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目录
Arguments

 

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

java中读取配置文件的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目录
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;
    }

}