IntelliJ中Java项目config.properties读取路径错误排查
解决IntelliJ中Java读取resources下配置文件找不到的问题
我来帮你搞定这个配置文件找不到的问题,这在Java项目里是个挺常见的小坑,咱们一步步理清楚原因和解决办法:
问题根源
你现在用FileInputStream("resources/config.properties")是从当前程序运行的工作目录去查找文件,但IntelliJ运行程序时的工作目录不一定是你想的项目根目录,更关键的是:resources目录是IntelliJ默认的Classpath资源目录,编译后里面的文件会被直接复制到输出目录(比如target/classes或out/production/classes)的根目录,不会保留resources这个子目录结构,所以你的路径写法从一开始就错了。
1. 正确读取Classpath中的配置文件
替换掉FileInputStream,改用ClassLoader的getResourceAsStream方法,这个方法会直接从Classpath中查找资源,不管运行环境的工作目录在哪里都能精准找到:
修改后的代码(还优化了流的关闭逻辑,用更安全的try-with-resources):
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ReadPropertyFile { public static void main(String[] args) { Properties prop = new Properties(); // 从Classpath读取资源,路径直接写config.properties即可 try (InputStream input = ReadPropertyFile.class.getClassLoader().getResourceAsStream("config.properties")) { if (input == null) { System.out.println("抱歉,找不到config.properties文件"); return; } // 加载配置文件 prop.load(input); // 读取并打印配置项 System.out.println(prop.getProperty("database")); System.out.println(prop.getProperty("dbuser")); System.out.println(prop.getProperty("dbpassword")); } catch (IOException ex) { ex.printStackTrace(); } // try-with-resources语法会自动关闭流,不用手动写finally了 } }
2. ReadPropertyFile类的正确放置位置
在IntelliJ中,src是默认的源码根目录,你完全可以把这个类放在src下的任意包中(比如创建一个com.example.utils的包,把类放进去),根本不影响资源文件的读取。只要类在src目录(或其子包)下,编译后就会被放到输出目录的对应包路径里,和resources编译后的文件同属Classpath,ClassLoader就能正常找到配置文件。
额外验证小技巧
- 你可以去项目的输出目录(比如
target/classes)看看,确认config.properties是不是直接在这个目录下,而不是在resources子目录里,这样就能验证路径是否正确。 - 如果你的
resources目录没被标记为“Resources Root”,右键点击它 →Mark Directory as→Resources Root,确保IntelliJ会把它的内容复制到Classpath中。
内容的提问来源于stack exchange,提问作者xAspired
相关产品推荐
相关产品推荐

