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...”,弹出窗口:
点击第二个标签“Arguments”,
找到最下面的“Working directory:”,一般初始为Default,如果不符合所需也可以自行设置Other,博主用的是“Variables”中的“project_path”
这其中还有很多别的实用变量可以自行选择。
我是在使用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;
}
}