解決IntelliJ IDEA無法讀取配置文件的問題
最近在學Mybatis,按照視頻的講解在項目的某個包里建立配置文件,然后讀取配置文件,但是一直提示異常。
讀取配置文件的為官方代碼:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
經過反復思考,視頻用的ide是eclipse,eclipse里在包下的配置文件(.propoties 和.xml等)編譯之后會自動復制到編譯后的文件夾中,也就是classes目錄。因此代碼可以通過路徑加載到配置文件。
而現在我們使用的是IntelliJ IDEA,idea對這些配置的文件方式很明顯和eclipse是不同的。在idea中有一個 Content Roots的概念。需要為每一個folder配置相應的Content Roots。Content Roots包括resources、sources、tests等。
如圖所示:
- java文件夾被標注為Sources,那么下面的所有子文件夾均為Sources,編譯后生成.class文件。
- Resources文件夾被標注為Resources,那么在該文件夾下的配置文件在編譯時會自動復制到編譯文件夾中。
那么對於idea來說,就有以下幾種解決方案。
- 將配置文件放到Resources文件夾中,在代碼中添加配置文件的虛擬路徑。選中文件,右鍵-Copy Reference,就可以獲取到文件的虛擬路徑。
- 把配置文件放在com.zjut.ssm.config包中,修改config文件夾的Content Roots為Resources,那么編譯后,代碼也能識別出來。
以上兩種解決方案適用於make project方式來編譯項目。
如果是maven項目。還可以通過配置pom.xml來實現。
<build>
<finalName>springmvc-study</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
這樣不用對idea設置,也可以使用maven的編譯命令編譯項目,並復制配置文件到編譯好的文件夾中。