絕對路徑就是有盤符的這種寫法,同理就是F:\\java\\package9\\T903FileTestDemo.java
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、瑞金網(wǎng)絡(luò)推廣、小程序定制開發(fā)、瑞金網(wǎng)絡(luò)營銷、瑞金企業(yè)策劃、瑞金品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供瑞金建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:m.kartarina.com
絕對路徑:
絕對路徑就是你的主頁上的文件或目錄在硬盤上真正的路徑,(url和物理路徑)例如:
c:\xyz\test.txt
代表了test.txt文件的絕對路徑。也代表了一個url絕對路徑。
相對路徑:
相對與某個基準(zhǔn)目錄的路徑。包含web的相對路徑(html中的相對目錄),例如:在
servlet中,"/"代表web應(yīng)用的根目錄。和物理路徑的相對表示,例如:"./"
代表當(dāng)前目錄,
"../"代表上級目錄。這種類似的表示,也是屬于相對路徑。
方法(一)、通過某個對象的getClass()方法取得Class,其中包含了類的許多信息。在其中找取得URL之類的方法,以便取得URL,然后調(diào)用URL的getpath()方法,取得字符串并稍作處理就得到該類的Class文件的絕對路徑,在此基礎(chǔ)上就可以方便的使用相對路徑。Object.getClass().getResource("/").getPath(); 方法(二) 通過類加載器獲取路徑信息public abstract class ClassLoader extends Object類加載器是負(fù)責(zé)加載類的對象。ClassLoader 類是一個抽象類。如果給定類的二進(jìn)制名稱,那么類加載器會試圖查找或生成構(gòu)成類定義的數(shù)據(jù)。一般策略是將名稱轉(zhuǎn)換為某個文件名,然后從文件系統(tǒng)讀取該名稱的“類文件”。 (1) 利用Thread類中的類加載器Thread.currentThread().getContextClassLoader()(2) 利用Class類獲取類加載器ClassName.class(或者 對象.getClass()).getClassLoader()API中ClassLoader的相關(guān)方法1、public URL getResource(String name)查找具有給定名稱的資源。資源是可以通過類代碼以與代碼基無關(guān)的方式訪問的一些數(shù)據(jù)(圖像、聲音、文本等)。資源名稱是以 '/' 分隔的標(biāo)識資源的路徑名稱。 此方法首先搜索資源的父類加載器;如果父類加載器為 null,則搜索的路徑就是虛擬機(jī)的內(nèi)置類加載器的路徑。如果搜索失敗,則此方法將調(diào)用 findResource(String) 來查找資源。 2、public static URL getSystemResource(String name)從用來加載類的搜索路徑中查找具有指定名稱的資源。此方法通過系統(tǒng)類加載器來查找資源。 方法(三)利用文件來獲取路徑 File ff=new File("");API中File類相關(guān)的方法:java.io.File 文件和目錄路徑名的抽象表示形式。1、public String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串2、public String getCanonicalPath() throws IOException 返回此抽象路徑名的規(guī)范路徑名字符串。 3、public String getPath() 將此抽象路徑名轉(zhuǎn)換為一個路徑名字符串。所得字符串使用默認(rèn)名稱分隔符分隔名稱序列中的名稱。4、public boolean isAbsolute()測試此抽象路徑名是否為絕對路徑名。絕對路徑名的定義與系統(tǒng)有關(guān)。在 UNIX 系統(tǒng)上,如果路徑名的前綴是 "/",那么該路徑名是絕對路徑名。在 Microsoft Windows 系統(tǒng)上,如果路徑名的前綴是后跟 "\\" 的盤符,或者是 "\\\\",那么該路徑名是絕對路徑名。 方法(四)利用System類提供信息java.lang.System 包 public final class System extends Object 類 System 類包含一些有用的類字段和方法。它不能被實(shí)例化。在 System 類提供的設(shè)施中,有標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯誤輸出流;對外部定義的屬性和環(huán)境變量的訪問;加載文件和庫的方法;還有快速復(fù)制數(shù)組的一部分的實(shí)用方法。方法:public static String getProperty(String key) 獲取指定鍵指示的系統(tǒng)屬性。首先,如果有安全管理器,則用該鍵作為其參數(shù)來調(diào)用 checkPropertyAccess 方法。結(jié)果可能導(dǎo)致 SecurityException。 如果沒有當(dāng)前系統(tǒng)屬性的集合,則首先用與 getProperties 方法相同的方式創(chuàng)建并初始化系統(tǒng)屬性的集合。 參數(shù): key - 系統(tǒng)屬性的名稱。返回: 系統(tǒng)屬性的字符串值,如果沒有帶有此鍵的屬性,則返回 null。 獲取當(dāng)前工作目錄為:System.getProperty("user.dir") // 方法一,利用Class的getResource方法類獲取信息(實(shí)際上該方法委托ClassLoader類實(shí)現(xiàn)) url= absp.getClass().getResource("/AbsPath.class"); path = url.getPath(); System.out.println("方法一:\nURL is : " + url); System.out.println("get Path is : " + path); System.out.println("Real Path is : " + path.substring(1)+"\n"); // 方法二,利用ClassLoader類獲取信息 ClassLoader loader=Thread.currentThread().getContextClassLoader(); //或者 //loader = AbsPath.class.getClassLoader(); url=loader.getResource(""); path=url.getPath(); System.out.println("方法二:\nURL is : " + url); System.out.println("get Path is : " + path); System.out.println("Real Path is : " + path.substring(1)); System.out.println(ClassLoader.getSystemResource("")+"\n"); // 方法三,利用文件來處理 File ff=new File(""); System.out.println("方法三:\n"+ff.getAbsolutePath()); System.out.println(ff.getCanonicalPath()); System.out.println(ff.isAbsolute()+ff.getPath()+"\n"); //方法四,利用System類相關(guān)信息 System.out.println("方法四:\n"+System.getProperty("user.home"));//用戶主目錄 System.out.println(System.getProperty("user.dir"));//用戶的當(dāng)前工作目錄 System.out.println(System.getProperty("java.class.path"));//Java類路徑 System.out.println(System.getProperty("os.name"));//操作系統(tǒng)名稱 System.out.println(System.getProperty("os.version"));//操作系統(tǒng)版本 方法一:URL is : file:/D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.classget Path is : /D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.classReal Path is : D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.class 方法二:URL is : file:/D:/Java/EclipseWorkSpace/MyJavaDocs/get Path is : /D:/Java/EclipseWorkSpace/MyJavaDocs/Real Path is : D:/Java/EclipseWorkSpace/MyJavaDocs/file:/D:/Java/EclipseWorkSpace/MyJavaDocs/ 方法三:D:\Java\EclipseWorkSpace\MyJavaDocsD:\Java\EclipseWorkSpace\MyJavaDocsfalse 方法四:d:\我的文檔D:\Java\EclipseWorkSpace\MyJavaDocsD:\Java\EclipseWorkSpace\MyJavaDocsWindows XP5.1
在jsp和class文件中調(diào)用的相對路徑不同。在jsp里,根目錄是WebRoot 在class文件中,根目錄是WebRoot/WEB-INF/classes 當(dāng)然你也可以用System.getProperty("user.dir")獲取工程的絕對路徑。
另:在Jsp,Servlet,Java中詳細(xì)獲得路徑的方法!
1.jsp中取得路徑:
以工程名為TEST為例:
(1)得到包含工程名的當(dāng)前頁面全路徑:request.getRequestURI()
結(jié)果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
結(jié)果:/TEST
(3)得到當(dāng)前頁面所在目錄下全名稱:request.getServletPath()
結(jié)果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp
(4)得到頁面所在服務(wù)器的全路徑:application.getRealPath("頁面.jsp")
結(jié)果:D:\resin\webapps\TEST\test.jsp
(5)得到頁面所在服務(wù)器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
結(jié)果:D:\resin\webapps\TEST
2.在類中取得路徑:
(1)類的絕對路徑:Class.class.getClass().getResource("/").getPath()
結(jié)果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路徑:System.getProperty("user.dir")
結(jié)果:D:\TEST
3.在Servlet中取得路徑:
(1)得到工程目錄:request.getSession().getServletContext().getRealPath("") 參數(shù)可具體到包名。
結(jié)果:E:\Tomcat\webapps\TEST
(2)得到IE地址欄地址:request.getRequestURL()
結(jié)果:
(3)得到相對地址:request.getRequestURI()
結(jié)果:/TEST/test
按照jdk Doc上的說法”絕對路徑名是完整的路徑名,不需要任何其他信息就可以定位自身表示的文件。相反,相對路徑名必須使用來自其他路徑名的信息進(jìn)行解釋。默認(rèn)情況下,java.io 包中的類總是根據(jù)當(dāng)前用戶目錄來分析相對路徑名。此目錄由系統(tǒng)屬性 user.dir 指定,通常是 Java 虛擬機(jī)的調(diào)用目錄.”\x0d\x0a \x0d\x0a相對路徑顧名思義,相對于某個路徑,那么究竟相對于什么路徑我們必須弄明白.按照上面jdk文檔上講的這個路徑是”當(dāng)前用戶目錄”也就是”java虛擬機(jī)的調(diào)用目錄”.更明白的說這個路徑其實(shí)是我們在哪里調(diào)用jvm的路徑.舉個例子:\x0d\x0a \x0d\x0a假設(shè)有一java源文件Example.java在d盤根目錄下,該文件不含package信息.我們進(jìn)入命令行窗口,然后使用”d:”命令切換到d盤根目錄下,然后用”javac Example.java”來編譯此文件,編譯無錯后,會在d盤根目錄下自動生成”Example.class”文件.我們在調(diào)用”java Example”來運(yùn)行該程序.此時我們已經(jīng)啟動了一個jvm,這個jvm是在d盤根目錄下被啟動的,所以此jvm所加載的程序中File類的相對路徑也就是相對這個路徑的,即d盤根目錄:D:/.同時” 當(dāng)前用戶目錄”也是D:/.在System.getProperty(“user.dir”);系統(tǒng)變量”user.dir”存放的也是這個值.\x0d\x0a我們可以多做幾次試驗(yàn),把”Example.class”移動到不同路徑下,同時在那些路徑下,執(zhí)行”java Example”命令啟動jvm,我們會發(fā)現(xiàn)這個”當(dāng)前用戶目錄”是不斷變化的,它的路徑始終和我們在哪啟動jvm的路徑是一致的.\x0d\x0a搞清了這些,我們可以使用相對路徑來創(chuàng)建文件,例如:\x0d\x0aFile file = new File(“a.txt”);\x0d\x0aFile.createNewFile();\x0d\x0a假設(shè)jvm是在”D:/”下啟動的,那么a.txt就會生成在D:/a.txt;\x0d\x0a此外,這個參數(shù)還可以使用一些常用的路徑表示方法,例如”.”或”./”代表當(dāng)前目錄,這個目錄也就是jvm啟動路徑.所以如下代碼能得到當(dāng)前目錄完整路徑:\x0d\x0aFile f = new File(“.”);\x0d\x0aString absolutePath = f.getAbsolutePath();\x0d\x0aSystem.out.println(absolutePath);//D:/\x0d\x0a最后要說說在eclipse中的情況:\x0d\x0aEclipse中啟動jvm都是在項(xiàng)目根路徑上啟動的.比如有個項(xiàng)目名為blog,其完整路徑為:D:/work/IDE/workspace/blog.那么這個路徑就是jvm的啟動路徑了.所以以上代碼如果在eclipse里運(yùn)行,則輸出結(jié)果為” D:/work/IDE/workspace/blog.”\x0d\x0a \x0d\x0aTomcat中的情況.\x0d\x0a如果在tomcat中運(yùn)行web應(yīng)用,此時,如果我們在某個類中使用如下代碼:\x0d\x0aFile f = new File(“.”);\x0d\x0aString absolutePath = f.getAbsolutePath();\x0d\x0aSystem.out.println(absolutePath);\x0d\x0a那么輸出的將是tomcat下的bin目錄.我的機(jī)器就是” D:/work/server/jakarta-tomcat-5.0.28/bin/.”,由此可以看出tomcat服務(wù)器是在bin目錄下啟動jvm的.其實(shí)是在bin目錄下的” catalina.bat”文件中啟動jvm的.
本文名稱:java代碼工程絕對路徑,關(guān)鍵路徑j(luò)ava代碼
分享地址:http://m.kartarina.com/article6/dseidog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、軟件開發(fā)、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、用戶體驗(yàn)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)