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 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文件的輸入流了。