java操作Properties屬性檔案及獲取專案部署伺服器路徑

落地僧發表於2016-01-09
</pre>一、web專案根目錄的獲得(釋出之後),java原生類中不可以使用1 從servlet出發可建立一個servlet在其的init方法中寫入如下語句(沒有請求的話會拋空指標導常)<pre name="code" class="java">ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (關鍵) 


結果形如:F:\tomcat-6.0.36\webapps\test\(test為專案名字)
如果是呼叫了s1.getRealPath("")則輸出F:\tomcat-6.0.36\webapps\test(少了一個"\")

2 從httpServletRequest出發(沒有請求的話會拋空指標導常)
String path=request.getSession().getServletContext().getRealPath("/");
結果形如: F:\tomcat-6.0.36\webapps\test\


二、屬性檔案的讀取: 
 1、filePath為.properties必須為絕對路徑,相對路徑找不到該檔案
 Properties props = new Properties();  
 InputStream in = lnew BufferedInputStream( new FileInputStream(filePath));
 p.load(in); 
 String realPath=props.getProperty("key");  

 2、filePath可為.properties相對路徑
 Properties props = new Properties();  
 props.load(NewUserController.class.getClassLoader().getResourceAsStream(filename));
 String realPath=props.getProperty("key");  
 ps:在讀寫操作檔案時,使用第一種方式做為輸入流(InputStream)可以讀寫操作,第二種方式僅限於讀取輸入流(InputStream),而寫入不到檔案中,但是不報錯的,同時會將你相對路徑的檔案拷貝到tomcat所在碟符根目錄下建立檔案。我tomcat在E盤所以會在E盤,則將我專案中相對路徑檔案拷貝到E盤下,之後修改這個檔案!


三、獲取伺服器路徑的各種方式
        //獲取伺服器中絕對地址,帶file: file:/D:/wc/.metadata/.plugins/org.eclipse.wst.server.core/tmp7/wtpwebapps/wanxue/WEB-INF/classes/
	System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
	System.out.println(this.getClass().getResource("/"));


	//獲取伺服器中絕對地址 /E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
        System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());


	//獲取當前類的在伺服器中絕對地址 /E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
        System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());


        //獲取當前專案在部署在伺服器的絕對位置,並去掉路徑前的下劃線  E:/workSoftware/apache-tomcat-7.0.56/webapps/wanxue/WEB-INF/classes/
        String path = switchDServiceImpl.class.getClassLoader().getResource("") .getPath().substring(1);  

ps:這個伺服器地址為你在eclipse中配置Apache Tomcat中的部署路徑,預設路徑為 workspace/.metadata/.plugins/org.eclipse.core.resources/.projects
ps:修改後Eclipse中專案在Apache Tomcat中的部署路徑,地址:點選開啟連結
ps:做專案過程中,一定要區分eclipse的預設專案Apache Tomcat的部署路徑,自己的專案工作目錄及自己安裝Apache Tomcat安裝目錄,以免混淆。


四、獲取其他路徑地址
	//tomcat根目錄  E:\workSoftware\apache-tomcat-7.0.56
	System.out.println(System.getProperty("catalina.home").toString());

	//eclipse根目錄地址  E:\workSoftware\eclipse
        System.out.println(System.getProperty("user.dir"));
        System.out.println((new File("")).getAbsolutePath());
        System.out.println(System.getProperty("user.dir").replace("bin", "webapps"));



五、JAVA讀寫操作程式碼
<span style="white-space:pre">	</span>//開關配置地址,獲取當前專案在部署在伺服器的絕對位置
	static String filePath =switchDServiceImpl.class.getClassLoader().getResource("") .getPath().substring(1)+"switchState.properties"; 
	/**
	 * @author 王超
	 * return 根據key取得value值
	 */  
	public  String keyValue(String key) {
		Properties pps = new Properties();
		try {
			InputStream in = new BufferedInputStream (new FileInputStream(filePath));  
			pps.load(in);
			String value = pps.getProperty(key);
			return value;
		}catch (Exception e) {
			e.printStackTrace();
			return "switchState.properties路徑找不到";
		}
	}
	/**
	 * 修改properties中鍵值對
	 * @author 王超
	 * @param  key 鍵
	 * @param  value 值 
	 */
	public  void writeProperties( String key, String value) {
		Properties pps = new Properties();
		InputStream in;
		try {
			in = new FileInputStream(filePath);
			//從輸入流中讀取屬性列表(鍵和元素對) 
			pps.load(in);
			//呼叫 Hashtable 的方法 put。使用 getProperty 方法提供並行性。  
			//強制要求為屬性的鍵和值使用字串。返回值是 Hashtable 呼叫 put 的結果。
			OutputStream out = new FileOutputStream(filePath);
			pps.setProperty(key, value);
			//以適合使用 load 方法載入到 Properties 表中的格式,  
			//將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流  
			pps.store(out, "Update " + key + " name");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

ps:這裡採用new BufferedInputStream (new FileInputStream(filePath))來進行讀寫檔案操作,在"三"中有介紹的
ps:呼叫keyValue(key)讀取檔案,呼叫writeProperties(key,value)進行新增或修改,當key存在則修改,不存在則新增鍵值對!
ps:在java專案中可以使用File.separator代表下劃線


相關文章