JAVA使用相對路徑讀取配置文件[align=center][/align][size=medium][/size]
在軟件開發中經常遇到讀取配置文件,以及文件定位問題。今天做個總結。
(一)在java project中的配置文件讀取
java project項目的目錄結構只有兩個src和bin。src中存放的是源文件,bin中存放的是*.class的字節碼文件。源文件進過編譯就放進bin目錄中,其中也包括沒有編譯的配置文件。我們需要的是對bin中的配置文件進行讀取,因為項目最終打包成*.jar的就是bin目錄下的文件。采用相對路勁進行讀取的時候,需要確定此時相對的是哪一個基路徑。其實這個基路徑就是java.io默認定位到的當前用戶目錄("user.dir")(即工程根目錄)。相對於這個路徑在定位我們的配置文件。如下所示:
File file=new File("test/login.conf");
JVM就可以據"user.dir"與"test/login.conf" 得到完整的路徑(即絕對路徑)"D:\DecisionTree\test\login.conf",從而找到login.conf文件。
通常我們使用 “類名”.class.getClassLoader().getResource("login.conf").openStream()來加載classes目錄下的配置文件。得到文件的輸入流。
“類名”.class.getClassLoader().getResource("")定位到的絕對路徑是WEB-INF\classes目錄下。getResource(String filepath)。參數filepath是classes目錄下的相對路徑。
在軟件開發中經常遇到讀取配置文件,以及文件定位問題。今天做個總結。
(一)在java project中的配置文件讀取
java project項目的目錄結構只有兩個src和bin。src中存放的是源文件,bin中存放的是*.class的字節碼文件。源文件進過編譯就放進bin目錄中,其中也包括沒有編譯的配置文件。我們需要的是對bin中的配置文件進行讀取,因為項目最終打包成*.jar的就是bin目錄下的文件。采用相對路勁進行讀取的時候,需要確定此時相對的是哪一個基路徑。其實這個基路徑就是java.io默認定位到的當前用戶目錄("user.dir")(即工程根目錄)。相對於這個路徑在定位我們的配置文件。如下所示:
File file=new File("test/login.conf");
JVM就可以據"user.dir"與"test/login.conf" 得到完整的路徑(即絕對路徑)"D:\DecisionTree\test\login.conf",從而找到login.conf文件。
通常我們使用 “類名”.class.getClassLoader().getResource("login.conf").openStream()來加載classes目錄下的配置文件。得到文件的輸入流。
“類名”.class.getClassLoader().getResource("")定位到的絕對路徑是WEB-INF\classes目錄下。getResource(String filepath)。參數filepath是classes目錄下的相對路徑。
(二)在java web project中的配置文件讀取
如果我們把配置文件定義在了classpath路徑下。也就是WEB-INF\classes路徑下,那么就可以像讀取java project中的配置文件那樣讀取了。
如果我們把配置文件定義在了WEB-INF的直接目錄下。而不是classes目錄下,那么是classpath之外的路徑了,通過上面的那種方式是讀取不到了。這是在應用環境下,要用到ServletContext,
ServletActionContext.getServletContext().getResource("/")可以定位到當前web應用目錄 如:jndi:/server/TEST/ TEST為當前的web應用系統名。getResource(String filepath) 注意其中filepath必須以“/”開始。
ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/config/login.conf");就可以得到/WEB-INF/config/login.conf文件的輸入流了。