Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别
File API在Java中非常重要,因為它使文件系統(tǒng)可以訪問Java程序。 盡管Java的文件API豐富,但是使用它們時仍需要了解許多細節(jié)。 關(guān)于文件路徑的常見查詢程序員之一是getPath() , getCanonicalPath()和getAbsolutePath()方法之間的區(qū)別,為什么有三種獲取文件路徑的方法以及如果調(diào)用getPath()代替getCanonicalPath()會發(fā)生什么情況? 。
順便說一下,在了解getPath(),getAbsolutePath()和getCanonicalPath()之間的區(qū)別之前,讓我們了解這些方法背后的概念,即path,absolute path和canonical path之間的區(qū)別 。 通常,路徑是到達文件系統(tǒng)中特定文件或目錄的方式,它可以是絕對路徑(也稱為完整路徑),也可以是相對于當前位置的相對路徑。
絕對路徑定義了從文件系統(tǒng)的根目錄(例如Windows中的C:\\或D:\\)以及從/的基于UNIX的操作系統(tǒng)(例如Linux或Solaris)中的路徑。 規(guī)范路徑有些棘手,因為所有規(guī)范路徑都是絕對的,反之亦然 。 它實際上定義了從文件系統(tǒng)根目錄到文件的唯一絕對路徑。 例如,C://temp/names.txt是Windows中names.txt的規(guī)范路徑,而/home/javinpaul/test/names.txt是Linux中的規(guī)范路徑。 另一方面,同一文件可以有很多絕對路徑,包括剛剛看到的規(guī)范路徑。 例如,Windows中另一個指向同一文件的絕對路徑可以是C://temp/./names.txt;。 類似地,在UNIX / home / javinpaul / test /./ names.txt中,是同一文件的另一個絕對路徑。 所以可以這樣說,絕對路徑可能包含元字符之類的。 和..代表當前目錄和父目錄。 在本文的其余部分,我們將通過查看特定文件返回的值來了解getPath(),getAbsolutePath()和getCanonical()路徑之間的區(qū)別。
在UNIX,Windows,Linux或任何文件系統(tǒng)中處理文件時,您通常會聽到術(shù)語,絕對,規(guī)范和相對路徑。 這是在腳本或程序中引用任何特定文件的三種常用方法。 如果您是一名程序員,則編寫腳本,那么您就會知道使用絕對路徑如何使您的腳本僵化和不靈活,使用絕對路徑實際上是無效的,而眾所周知,腳本中的硬編碼路徑是程序員字典中不良的編碼實踐之一。 。 絕對路徑是指向特定文件(例如C:\ temp \ abc.txt)的完整路徑。 絕對路徑名的定義也取決于系統(tǒng)。 在UNIX系統(tǒng)上,如果路徑名的前綴是“ /”,則它是絕對的。 在Win32系統(tǒng)上,如果路徑名的前綴是驅(qū)動器說明符,后跟“ \\”,或者其前綴是“ \\”,則該路徑名是絕對路徑。
例如,我們有兩個目錄:temp和temp1,而test.txt文件位于temp目錄中。
C:\tempC:\temp1在Windows下的Java中,您可能具有以下可能的絕對路徑,它們引用同一文件test.txt。
C:\temp\test.txtC:\temp\test.txt C:\temp\TEST.TXT C:\temp\.\test.txt C:\temp1\..\temp\test.txt另一方面,相對路徑是相對于您所在目錄的目錄,稱為當前目錄。 因此,如果您在上述目錄中,則如果將文件test.txt作為相對目錄引用,則它假定您所在的目錄相同。當執(zhí)行../時,它將返回一個目錄,也稱為父目錄。 規(guī)范路徑要難一些。 對于初學者,所有規(guī)范路徑都是絕對路徑(但并非所有絕對路徑都是規(guī)范路徑)。 系統(tǒng)上存在的單個文件可以具有許多引用該文件的路徑,但是只有一個規(guī)范路徑。 Canonical為給定文件提供了唯一的絕對路徑。 如何實現(xiàn)這一點的細節(jié)可能取決于系統(tǒng)。 對于上面的示例,我們只有一個規(guī)范路徑:C:\ temp \ test.txt,請記住,在Java中,您可以使用路徑分隔符來使用UNIX樣式的正斜杠(/),或者甚至可以使用file獲取操作系統(tǒng)路徑分隔符。分隔符系統(tǒng)屬性,是編寫真正與平臺無關(guān)的Java應用程序的關(guān)鍵 。
一旦您了解了絕對路徑,規(guī)范路徑和相對路徑之間的區(qū)別,就很容易區(qū)分這三種方法,因為它們實際上返回的是路徑,絕對路徑和規(guī)范路徑。 簡而言之,這是它們之間的主要區(qū)別:
還要記住,以上兩個方法中的每個方法都有一個File等效項,該等效項返回相應的File對象,例如getAbsoluteFile()和getCanonicalFile(),它們返回相同的內(nèi)容。
下面的示例說明如何在同一文件中有許多不同的路徑(和絕對路徑),它們都具有完全相同的規(guī)范路徑。 因此,如果您想知道兩個不同的路徑是否指向同一文件,則規(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ū)別。 在課程中,我們還了解了路徑,絕對路徑和規(guī)范路徑之間的區(qū)別。 您需要記住的是,getPath()為您提供了創(chuàng)建File對象的路徑,該路徑可能是相對的,也可能不是相對的。 getAbsolutePath()給出文件的絕對路徑; getCanonicalPath()為您提供文件的唯一絕對路徑。 值得注意的是,可能有大量指向同一文件的絕對路徑,但只有一個規(guī)范路徑。
翻譯自: https://www.javacodegeeks.com/2014/08/difference-between-getpath-getcanonicalpath-and-getabsolutepath-of-file-in-java.html
總結(jié)
以上是生活随笔為你收集整理的Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低端手机性价比排行(性价比最低手机排行榜
- 下一篇: 检查Red Hat JBoss BRMS