Java項目訪問resources文件


  • 最近在對接支付寶支付的開發,需要取到支付的RSA公鑰和私鑰。於是把公鑰和私鑰加到resources文件夾里。但是不知道怎么讀到這兩個文件,也就是不知道路徑怎么寫。於是網上搜索了下如何獲取工作路徑,System.getProperty("user.dir"); 用單元測試跑了下,可以拿到Module路徑。
    1

  • 得到D:\WorkSpace\daikuan\aic\aic-common
    aic是project aic-common 是module路徑。然后部署到Tomcat下獲取到的就是D:\Java\apache-tomcat-8.5.8\bin 了,竟然是Tomcat路徑。
    2

  • 所以使用System.getProperty("user.dir");取項目文件這一招不好使,咨詢其他同事得知可以通過ClassLodaer路徑獲取項目下得文件。getClassLoader代碼如下

		public static ClassLoader getClassLoader() {
		    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		
		    if (classLoader == null) {
		        classLoader = PropertiesUtil.class.getClassLoader();
		    }
		    return classLoader;
		}
  • getResources返回來的是一個URL 對象集合,不盡友好,但還是可以用,項目結構如下

3

  • ClassLoader 並未提供class的路徑,但是提供了getResources用以搜索class下的文件,獲取密鑰的代碼如下
	    Enumeration<URL> keyPath= PropertiesUtil.getClassLoader().getResources("resources\\tianping\\private-rsa.pfx");
	    URL url=null;
		String path=null;
	    while(keyPath.hasMoreElements()){
	        url=keyPath.nextElement();
	        System.out.println(url.getPath());
			String path=url.getPath();
	    }
  • 返回來的 keyPath 是空的,同事取configuration.properties是沒問題,那么問題應該出在我寫的路徑上。比這時候我去生成的war包里查看了下configuration.properties和tianping文件夾的相對關系,如圖所示
    4
  • configuration.properties就在classes 路徑下,而我放在resources的路徑的天平文件夾也在classes路徑下,大概是Maven打包的原因吧。於是我就直接將"resources\tianping\private-rsa.pfx" 改成了"tianping\private-rsa.pfx"
  • 改完之后打印出來的是這樣一個路徑 /D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping%5cprivate-rsa.pfx。%5 給人感覺是轉過編碼似的,所以我做了個 URLDecoder.decode 解碼得到/D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping\private-rsa.pfx竟然出現了這樣的路徑 即含有/ 還含有\。
  • 然后用FileInputStream ksfis = new FileInputStream(path);試了一下是可以訪問的。baidu了下沒有找到關於路徑中同時有/ \的資料,有點摸不着頭腦了。我感覺出現\ 可能會和"tianping\private-rsa.pfx" 有關系,所以我就改成了 "tianping/private-rsa.pfx"返回的路徑就正常多了 /D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping/private-rsa.pfx 使用FileInputStream也是可以訪問的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM