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");