先看项目截图
public class FileTest {
public static void main(String[]args) throws IOException {
String path = Objects.requireNonNull(FileTest.class.getClassLoader().getResource("")).getPath();
System.out.println(path);
System.out.println("***********");
String result = FileUtils.readFileToString(new File(path+"config/First.xml"), StandardCharsets.UTF_8);
System.out.println(result);
}
}
文件放在resources目录下,用上面的方式就能读。
那如果文件放到src目录下呢?
比较麻烦
为什么?因为我们知道java的运行是把后缀名为java的文件进行编译,编译成.class文件, 然后统一放到/Users/dongleifeng/IdeaProjects/parent_pro/spring_boot/target/classes/ 下面这个位置
我们可以看到target下有两个文件夹一个classes和一个test-classes
如上图所示,我用的ide是idea,idea默认只把
src/main/java 下的后缀名为.java的文件进行了编译,复制到classes文件夹
src/main/resources 下的所有配置文件复制到classes文件夹
还有test下面的对应文件复制到test-classes
加入你把配置文件放到src下面,最终咱们的业务逻辑是在classes文件夹里开始的,那自然就没法感知到原来的src/main/java下面的配置文件了。
怎么办,既然知道了为什么访问不到文件,那想办法让idea把src下面的非java文件也复制到target/classes下面不就OK了?
解决方案见:
https://blog.csdn.net/shifangwannian/article/details/48882201
但是我觉得不好,最好的方式依然是把配置文件放到resources目录下
人家规范都定好了
src下面是源文件
resources下是配置文件
为啥要打破这个规则呢?
另外再附一个读取properties文件的方式
【Java】读取/加载 properties配置文件的几种方法