file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...
file.getpath
File API在Java中非常重要,因?yàn)樗刮募到y(tǒng)可以訪問Java程序。 盡管Java的文件API豐富,但是使用它們時(shí)仍需要了解很多細(xì)節(jié)。 關(guān)于文件路徑的常見查詢程序員之一是getPath() , getCanonicalPath()和getAbsolutePath()方法之間的區(qū)別,為什么有三種獲取文件路徑的方法以及如果調(diào)用getPath()代替getCanonicalPath()會(huì)發(fā)生什么情況? 。
順便說一句,在理解getPath(),getAbsolutePath()和getCanonicalPath()之間的區(qū)別之前,讓我們了解這些方法背后的概念,即path,absolute path和canonical path之間的區(qū)別 。 通常,路徑是到達(dá)文件系統(tǒng)中特定文件或目錄的方式,它可以是絕對(duì)路徑(也稱為完整路徑),也可以是相對(duì)的,例如相對(duì)于當(dāng)前位置。
絕對(duì)路徑定義了從文件系統(tǒng)的根目錄(例如Windows中的C:\\或D:\\)以及從/的基于UNIX的操作系統(tǒng)(例如Linux或Solaris)中的路徑。 規(guī)范路徑有點(diǎn)棘手,因?yàn)樗幸?guī)范路徑都是絕對(duì)的,反之亦然 。 它實(shí)際上定義了從文件系統(tǒng)根目錄到文件的唯一絕對(duì)路徑。 例如,C://temp/names.txt在Windows中是names.txt的規(guī)范路徑,而/home/javinpaul/test/names.txt在Linux中是規(guī)范路徑。 另一方面,同一文件可以有很多絕對(duì)路徑,包括剛剛看到的規(guī)范路徑。 例如,Windows中相同文件的另一個(gè)絕對(duì)路徑可以是C://temp/./names.txt;。 類似地,在UNIX / home / javinpaul / test /./ names.txt中,是同一文件的另一個(gè)絕對(duì)路徑。 所以可以這樣說,絕對(duì)路徑可能包含元字符之類的。 和..代表當(dāng)前目錄和父目錄。 在本文的其余部分,我們將通過查看返回給特定文件的值來了解getPath(),getAbsolutePath()和getCanonical()路徑之間的區(qū)別。
在UNIX,Windows,Linux或任何文件系統(tǒng)中處理文件時(shí),您通常會(huì)聽到術(shù)語,絕對(duì),規(guī)范和相對(duì)路徑。 這是在腳本或程序中引用任何特定文件的三種常用方法。 如果您是一名程序員,則編寫腳本,那么您就會(huì)知道使用絕對(duì)路徑如何使您的腳本僵化和不靈活,使用絕對(duì)路徑實(shí)際上是無效的,而眾所周知,腳本中的硬編碼路徑是程序員字典中不良的編碼做法之一。 。 絕對(duì)路徑是指向特定文件(例如C:\ temp \ abc.txt)的完整路徑。 絕對(duì)路徑名的定義也取決于系統(tǒng)。 在UNIX系統(tǒng)上,如果路徑名的前綴為“ /”,則該路徑名是絕對(duì)的。 在Win32系統(tǒng)上,如果路徑名的前綴是驅(qū)動(dòng)器說明符,后跟“ \\”,或者其前綴是“ \\”,則該路徑名是絕對(duì)路徑。
例如,我們有兩個(gè)目錄:temp和temp1,而test.txt文件位于temp目錄中。
C:\tempC:\temp1在Windows下的Java中,您可能具有以下可能的絕對(duì)路徑,它們引用同一文件test.txt。
C:\temp\test.txtC:\temp\test.txt C:\temp\TEST.TXT C:\temp\.\test.txt C:\temp1\..\temp\test.txt另一方面,相對(duì)路徑是相對(duì)于您所在目錄的目錄,稱為當(dāng)前目錄。 因此,如果您在上述目錄中,則如果將文件test.txt作為相對(duì)文件進(jìn)行引用,則它假定您所在的目錄相同。當(dāng)執(zhí)行../時(shí),它將返回一個(gè)目錄,也稱為父目錄。 規(guī)范路徑要難一些。 對(duì)于初學(xué)者,所有規(guī)范路徑都是絕對(duì)路徑(但并非所有絕對(duì)路徑都是規(guī)范路徑)。 系統(tǒng)上存在的單個(gè)文件可以具有許多引用該文件的路徑,但是只有一個(gè)規(guī)范路徑。 Canonical為給定文件提供了唯一的絕對(duì)路徑。 如何實(shí)現(xiàn)這一點(diǎn)的細(xì)節(jié)可能取決于系統(tǒng)。 對(duì)于上面的示例,我們只有一個(gè)規(guī)范路徑:C:\ temp \ test.txt,請(qǐng)記住,在Java中,您可以使用UNIX風(fēng)格的正斜杠(/)使用路徑分隔符,甚至可以使用file獲取操作系統(tǒng)路徑分隔符。分隔符系統(tǒng)屬性,是編寫真正與平臺(tái)無關(guān)的Java應(yīng)用程序的關(guān)鍵 。
一旦您了解了絕對(duì)路徑,規(guī)范路徑和相對(duì)路徑之間的差異,就很容易區(qū)分這三種方法,因?yàn)樗鼈儗?shí)際上返回的是路徑,絕對(duì)路徑和規(guī)范路徑。 簡而言之,這是它們之間的主要區(qū)別:
還要記住,以上兩個(gè)方法中的每個(gè)方法都有一個(gè)File等效項(xiàng),該等效項(xiàng)返回相應(yīng)的File對(duì)象,例如getAbsoluteFile()和getCanonicalFile(),它們返回相同的內(nèi)容。
下面的示例說明了到同一個(gè)文件的方式有很多不同的路徑(和絕對(duì)路徑),它們都具有完全相同的規(guī)范路徑。 因此,如果您想知道兩個(gè)不同的路徑是否指向同一文件,則規(guī)范路徑很有用。
import java.io.File;/*** Java program to show difference between path, absolute path and canonical* path related to files in Java. File API provides three methods to* java.io.File class getPath(), getAbsolutePath() and getCanonicalPath() and* this program just explain what those method returns.** @author Javin Paul*/ public class PathDemo {public static void main(String args[]) {System.out.println("Path of the given file :");File child = new File(".././Java.txt");displayPath(child);File parent = child.getParentFile();System.out.println("Path of the parent file :");displayPath(parent);}public static void displayPath(File testFile) {System.out.println("path : " + testFile.getPath());System.out.println("absolute path : " + testFile.getAbsolutePath());try {System.out.println("canonical path : " + testFile.getCanonicalPath());} catch (Exception e) {e.printStackTrace();}}}Output: Path of the given file : path : ..\.\Java.txt absolute path : C:\Users\WINDOWS 8\workspace\Demo\..\.\Java.txt canonical path : C:\Users\WINDOWS 8\workspace\Java.txtPath of the parent file : path : ..\. absolute path : C:\Users\WINDOWS 8\workspace\Demo\..\. canonical path : C:\Users\WINDOWS 8\workspace這就是Java中的getPath(),getAbsolutePath()和getCanonicalPath()之間的區(qū)別。 在課程中,我們還學(xué)習(xí)了路徑,絕對(duì)路徑和規(guī)范路徑之間的區(qū)別。 您需要記住的是,getPath()為您提供了創(chuàng)建File對(duì)象的路徑,該路徑可能是相對(duì)的,也可能不是相對(duì)的。 getAbsolutePath()給出文件的絕對(duì)路徑; getCanonicalPath()為您提供文件的唯一絕對(duì)路徑。 值得注意的是,可能有大量指向同一文件的絕對(duì)路徑,但只有一個(gè)規(guī)范路徑。
翻譯自: https://www.javacodegeeks.com/2014/08/difference-between-getpath-getcanonicalpath-and-getabsolutepath-of-file-in-java.html
file.getpath
總結(jié)
以上是生活随笔為你收集整理的file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想c200一体机(联想C200一体机拆
- 下一篇: 千元平板电脑性价比排行(千元平板性价比之