1. 程式人生 > >web專案讀取WEB-INF下properties檔案

web專案讀取WEB-INF下properties檔案

開發時經常要讀取properties檔案的配置資訊,但是properties檔案所在的位置和properties訪問方式不同讀取方式也不同

1、訪問方式一般分:java專案和web專案。

2、檔案位置:與原始檔相同目錄和與源目錄不相同

java專案與原始檔相同目錄讀取properties檔案方法,在main函式中讀取 ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.io.FileInputStream; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertiesUtils { public static void main(String[] args) { Properties properties = new Properties(); try { InputStream in = PropertiesUtils.class.getResourceAsStream("./db.properties");//或者直接寫成"db.properties"
properties.load(in); String url = properties.getProperty("url"); String userName = properties.getProperty("user"); String password = properties.getProperty("password"); System.out.println("url="+url+",userName="+userName+",password="+password); } catch (FileNotFoundException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace(); } } }

父級或子級目錄只要加相應的方法路徑即可。讀取properties檔案的關鍵是能夠訪問到properties檔案,讀取的方法是一樣的,主要在於訪問的方法不一樣。 maven組織的web專案中讀取properties檔案方法

以下方法是在http請求情況下訪問的

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public Map<string, string=""> getDBInfo() { Map<string, string=""> dbInfo = new HashMap<string, string="">(); try { String url = this.getClass().getResource("").getPath();  String path = url.substring(0, url.indexOf("WEB-INF")) + "WEB-INF/db.properties" Properties config = new Properties();  InputStream in = new FileInputStream(path); config.load(in); String dbUrl = config.getProperty("<span style="font-family:Arial, Helvetica, sans-serif;">dbUrl</span>"); dbInfo.put("url", dbUrl); dbInfo.put("userName", config.getProperty("user")); dbInfo.put("password", config.getProperty("password")); } catch (Exception e) { e.printStackTrace(); } return dbInfo; }</string,></string,></string,>

以上兩種區別主要在於getResourceAsStream和getResource。

附錄:

Java中getResourceAsStream的用法:
首先,Java中的getResourceAsStream有以下幾種:
1. Class.getResourceAsStream(String path) : path 不以’/'開頭時預設是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。

2. Class.getClassLoader.getResourceAsStream(String path) :預設則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。

3. ServletContext. getResourceAsStream(String path):預設從WebAPP根目錄下取資源,Tomcat下path是否以’/'開頭無所謂,當然這和具體的容器實現有關。

getResourceAsStream 用法大致有以下幾種:
第一: 要載入的檔案和.class檔案在同一目錄下,例如:com.demo 下有類Test.class ,同時有資原始檔myfile.xml
那麼,應該有如下程式碼:
Test.class.getResourceAsStream("myfile.xml");

第二:在me.class目錄的子目錄下,例如:com.demo 下有類Test.class ,同時在com.demo.file 目錄下有資原始檔myfile.xml
那麼,應該有如下程式碼:
Test.class.getResourceAsStream("file/myfile.xml");
或者如下寫法:
Test.class.getResourceAsStream("./file/myfile.xml");
第三:不在Test.class目錄下,也不在子目錄下,例如:com.demo 下有類Test.class ,同時在 com.demo.file 目錄下有資原始檔myfile.xml
那麼,應該有如下程式碼:
Test.class.getResourceAsStream("/com/demo/file/myfile.xml");


總結一下,可能只是兩種寫法
第一:前面有 “/”
“ / ”代表了工程的根目錄,例如工程名叫做myproject,“ / ”代表了myproject
Test.class.getResourceAsStream("/com/demo/file/myfile.xml");

第二:前面沒有 “/”,代表當前類的目錄(當前路徑也可以用“./”表示)
Test.class.getResourceAsStream("myfile.xml");
Test.class.getResourceAsStream("file/myfile.xml");
或者如下寫法:
Test.class.getResourceAsStream("./myfile.xml");
Test.class.getResourceAsStream("./file/myfile.xml");