今天使用Intellij Idea調試一段使用輸入流加載properties配置文件的代碼,代碼以下:html
String propFileName = "config.properties"; InputStream inputStream = new BufferedInputStream(new FileInputStream(new File(propFileName))); Properties props = new Properties(); if (null != inputStream) { props.load(inputStream); } else { throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath."); }
運行時始終報系統找不到指定的文件異常:java
13:38:26.590 [main] WARN com.mikewoo.server.CentralSystemServer - load server config failed java.io.FileNotFoundException: config.properties (系統找不到指定的文件。) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.FileInputStream.<init>(FileInputStream.java:138) at com.mikewoo.server.config.ServerConfig.load(ServerConfig.java:51) at com.mikewoo.server.CentralSystemServer.main(CentralSystemServer.java:24)
可是文件路徑和名字都沒錯,並且在eclipse下能正常運行,可在IEDA中就是報錯。intellij-idea
後來受StackOverFlow上的一篇文章 Getting FileNotFoundException even though file exists and is spelled correctly的啓發,在項目中輸出配置文件的絕對路徑和當前路徑:eclipse
File file=new File("config.properties"); System.out.println(file.getAbsolutePath()); System.out.println(System.getProperty("user.dir"));
輸出結果:ide
E:\program\ocpp-server\central-system-server\config.properties E:\program\ocpp-server\central-system-server
仔細查看輸出信息發現,路徑定位的竟然是Project路徑,而不是實際所在的Module路徑。這才使我想起來最開始學習使用時,IntelliJ IDEA官方一篇文章Migrating From Eclipse to IntelliJ IDEA中介紹過,IntelliJ IDEA中的Project,並非真正的project,它其實跟eclipse中的workspace相似,在IntelliJ IDEA裏面「new Project」就至關於咱們eclipse的「workspace」,而「new Module」纔是建立一個工程。學習
而後查看項目的啓動配置,發現Working Directory中配置的路徑果真指到的是Project上面了,所以出現配置文件加載不到配置文件的緣由。idea
在IntelliJ IDEA中使用如上方式加載配置文件,是須要將啓動配置中Working Directory選項的路徑參數配置爲$MODULE_WORKING_DIR$便可,示例設置以下圖: spa