很多朋友都想知道java如何獲取路徑?下面就一起來了解一下吧~
方法一:使用System獲取路徑
方法二:使用當前類的ProtectionDomain或者ClassLoader獲取路徑
方法三:使用Thread獲取路徑
方法一:
示例:
?public static? final String URLConfig = System.getProperty("user.dir").replace("bin", "webapps")+"/URLConfig.properties";//這種是將配置文件放到Tomcat的webapps的目錄下
其中的 System.getProperty("user.dir")? 為獲取用戶當前工作目錄
java的System.getProperty()方法可以獲取的值
獲取的代碼示例:
public???class??SystemProperty?{?? ????public???static???void??main(String?args[])?{????? ????System.out.println("java_vendor:"??+?System.getProperty(?"java.vendor"?));????? ????System.out.println("java_vendor_url:"?????? ?????????????+?System.getProperty("java.vendor.url"?));????? ????System.out.println("java_home:"??+?System.getProperty(?"java.home"?));????? ????System.out.println("java_class_version:"?????? ?????????????+?System.getProperty("java.class.version"?));????? ????System.out.println("java_class_path:"?????? ????????????+?System.getProperty("java.class.path"?));????? ????System.out.println("os_name:"??+?System.getProperty(?"os.name"?));????? ????System.out.println("os_arch:"??+?System.getProperty(?"os.arch"?));????? ????System.out.println("os_version:"??+?System.getProperty(?"os.version"?));????? ????System.out.println("user_name:"??+?System.getProperty(?"user.name"?));????? ????System.out.println("user_home:"??+?System.getProperty(?"user.home"?));????? ????System.out.println("user_dir:"??+?System.getProperty(?"user.dir"?));????? ????System.out.println("java_vm_specification_version:"?????? ????????????+?System.getProperty("java.vm.specification.version"?));????? ????System.out.println("java_vm_specification_vendor:"?????? ????????????+?System.getProperty("java.vm.specification.vendor"?));????? ????System.out.println("java_vm_specification_name:"?????? ????????????+?System.getProperty("java.vm.specification.name"?));????? ????System.out.println("java_vm_version:"?????? ????????????+?System.getProperty("java.vm.version"?));????? ????System.out.println("java_vm_vendor:"?????? ????????????+?System.getProperty("java.vm.vendor"?));????? ????System.out????? ????????????.println("java_vm_name:"??+?System.getProperty(?"java.vm.name"?));????? ????System.out.println("java_ext_dirs:"?????? ????????????+?System.getProperty("java.ext.dirs"?));????? ????System.out.println("file_separator:"?????? ????????????+?System.getProperty("file.separator"?));????? ????System.out.println("path_separator:"?????? ????????????+?System.getProperty("path.separator"?));????? ????System.out.println("line_separator:"?????? ????????????+?System.getProperty("line.separator"?));????? }
方法二:
public?static?String?getMyDIR(){//獲取當前類文件的絕對路徑 String?jarWholePath?=?ConfigerPraram.class.getProtectionDomain().getCodeSource().getLocation().getFile();? try?{? //保險起見,將路徑進行decode轉碼 jarWholePath?=?java.net.URLDecoder.decode(jarWholePath,?"UTF-8");? }?catch?(UnsupportedEncodingException?e)?{?System.out.println(e.toString());?}? //獲取jar包的上級目錄 String?jarPath?=?new?File(jarWholePath).getParentFile().getAbsolutePath();? return?jarPath; } /** ?????*?獲取項目所在路徑 ?????*? ?????*?@return ?????*/ ????public?static?String?getRealPath()?{ //通過類加載器獲取jar包的絕對路徑 ????????String?realPath?=?MyPath.class.getClassLoader().getResource("") ????????????????.getFile(); ????????java.io.File?file?=?new?java.io.File(realPath); ????????realPath?=?file.getParentFile().getAbsolutePath();?//獲取jar包的上級目錄 try?{ //路徑decode轉碼 ????????????realPath?=?java.net.URLDecoder.decode(realPath,?"utf-8"); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} return?realPath?;? }
方法三:
Thread.currentThread().getContextClassLoader().getResource("")來得到當前的classpath的絕對路徑的URI表示法
Application可以通過new FileInputStream("xx.properties");直接在classes一級獲取。關鍵是有時我們需要通過web修改配置文件,我們不 能將路徑寫死了。經過測試覺得有以下心得:
1.servlet中讀寫。如果運用Struts 或者Servlet可以直接在初始化參數中配置,調用時根據servlet的getRealPath("/")獲取真實路徑,再根據String file = this.servlet.getInitParameter("abc");獲取相對的WEB-INF的相對路徑。
例:
InputStream?input?=Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.properties");? Properties?prop?=?new?Properties(); prop.load(input); input.close(); prop.setProperty("abc",?“test"); prop.store(new?FileOutputStream(path),?“–test–");? out.close();
2.直接在jsp中操作,通過jsp內置對象獲取可操作的絕對地址。
例:
//?jsp頁面 String?path?=?pageContext.getServletContext().getRealPath("/"); String?realPath?=?path+"/WEB-INF/classes/abc.properties"; //java?程序 InputStream?in?=?getClass().getClassLoader().getResourceAsStream("abc.properties");?//?abc.properties放在webroot/WEB-INF/classes/目錄下 prop.load(in); in.close(); OutputStream?out?=?new?FileOutputStream(path);?//?path為通過頁面傳入的路徑 prop.setProperty("abc",?“abcccccc"); prop.store(out,?“–test–"); out.close();
3.只通過Java程序操作資源文件
InputStream?in?=?new?FileInputStream("abc.properties");?//?相對路徑,項目下的路徑 OutputStream?out?=?new?FileOutputStream("abc.properties");
以上就是小編今天的分享,希望能夠幫到大家。