File類文件操作全解

轉載於:http://blog.csdn.net/quinnnorris/article/details/71521793

Java使用File類對文件進行操作。在很多教程中,我們會同時學到File類和類似FileInputStream這樣的流,非常容易將兩者混淆。實際上只要掌握了他們的工作原理就不難理解,File類以操作文件的屬性和狀態爲主,而IO流以在兩個客戶端之間傳輸數據爲主。雖然同是操作文件但出發點是不同的。File類很簡單,我們通過實際的例子來學習它的常用API方法。

File類規則約定

當程序接觸到底層的操作系統時,一些細小而繁雜的事引起了File類開發者的注意。
他們爲了避免將問題複雜化,採用了下面四種約定將JAVA和文件系統在一定程度上良好的結合。

路徑名約定

  1. 對於 UNIX 平臺,絕對路徑名的前綴始終是 “/”。相對路徑名沒有前綴。表示根目錄的絕對路徑名的前綴爲 “/” 且名稱序列爲空。
  2. 對於Microsoft Windows 平臺,包含盤符的路徑名前綴由驅動器號和一個 “:” 組成。如果路徑名是絕對路徑名,還可能後跟“\”。UNC 路徑名的前綴是 “\\”;主機名和共享名是名稱序列中的前兩個名稱。沒有指定驅動器的相對路徑名沒有前綴。

通常,我們在使用windows操作系統下,可以採用”\”或”/”來表示路徑的分隔符,反斜槓需要寫兩個爲了表示轉義的意思。

分區約定

此類的實例可能表示(也可能不表示)實際文件系統對象,如文件或目錄。如果它表示這種對象,那麼該對象駐留在一個分區 中。分區是文件系統特定於操作系統的存儲分區。一個存儲設備(例如,物理磁盤驅動器、閃存、CD-ROM)可以包含多個分區。對象(如果有)將駐留在此路徑名(絕對形式)某個祖先指定的分區上。

權限約定

文件系統可以實現對實際文件系統對象上的某些操作(比如,讀、寫、執行)進行限制。這些限制統稱爲訪問權限。文件系統可以對一個對象設置多個訪問權限。例如,一個設置可能適用於對象的所有者,另一個設置則可能適用於所有其他用戶。對象上的訪問權限可能導致此類的某些方法執行失敗。

不可變約定

File 類的實例是不可變的;也就是說,一旦創建,File 對象表示的抽象路徑名將永不改變。

構造器方法

    //1
    File f1 =new File("c:\\a\\b.txt");
    //2
    File f2 =new File("c:\\a","c.txt");
    //3
    File f3 =new File("c:"+File.separator+"abc");
    File f4 =new File(f3,"3.txt");

File類構造方法有4種,其中3種比較常用。
File.separator是File類的一個字段separator,在任何平臺中可以充當當前操作系統的文件分隔符。

創建文件方法

public boolean createNewFile( ) throws IOException

當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。檢查文件是否存在,若不存在則創建該文件,這是單個操作,對於其他所有可能影響該文件的文件系統活動來說,該操作是不可分的。

返回:
如果指定的文件不存在併成功地創建,則返回 true;如果指定的文件已經存在,則返回 false

public boolean mkdirs( )

創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。注意,此操作失敗時也可能已經成功地創建了一部分必需的父目錄。

返回:
當且僅當已創建目錄以及所有必需的父目錄時,返回 true;否則返回 false

獲取文件信息方法

public File getAbsoluteFile( )

返回此抽象路徑名的絕對路徑名形式。等同於 new File(this.getAbsolutePath())。

返回:
絕對抽象路徑名,它與此抽象路徑名錶示相同的文件或目錄

public String getName( )

返回由此抽象路徑名錶示的文件或目錄的名稱。該名稱是路徑名名稱序列中的最後一個名稱。如果路徑名名稱序列爲空,則返回空字符串。

返回:
此抽象路徑名錶示的文件或目錄的名稱;如果路徑名的名稱序列爲空,則返回空字符串

public String getParent( )

返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。
抽象路徑名的父 路徑名由路徑名的前綴(如果有),以及路徑名名稱序列中最後一個名稱以外的所有名稱組成。如果名稱序列爲空,那麼該路徑名沒有指定父目錄。

返回:
此抽象路徑名指定父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null

public File getParentFile( )

返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null。
抽象路徑名的父 路徑名由路徑名的前綴(如果有),以及路徑名名稱序列中最後一個名稱以外的所有名稱組成。如果名稱序列爲空,那麼該路徑名沒有指定父目錄。

返回:
此抽象路徑名指定父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null

public long length( )

返回由此抽象路徑名錶示的文件的長度。如果此路徑名錶示一個目錄,則返回值是不確定的。

返回:
此抽象路徑名錶示的文件的長度,以字節爲單位;如果文件不存在,則返回 0L。對於表示特定於系統的實體(比如設備或管道)的路徑名,某些操作系統可能返回 0L。

判斷文件狀態方法

public boolean isAbsolute( )

測試此抽象路徑名是否爲絕對路徑名。絕對路徑名的定義與系統有關。在 UNIX 系統上,如果路徑名的前綴是 “/”,那麼該路徑名是絕對路徑名。在 Microsoft Windows 系統上,如果路徑名的前綴是後跟 “\” 的盤符,或者是 “\\”,那麼該路徑名是絕對路徑名。

返回:
如果此抽象路徑名是絕對路徑名,則返回 true;否則返回 false

public boolean isDirectory( )

測試此抽象路徑名錶示的文件是否是一個目錄。

返回:
當且僅當此抽象路徑名錶示的文件存在且 是一個目錄時,返回 true;否則返回 false

public boolean isFile( )

測試此抽象路徑名錶示的文件是否是一個標準文件。如果該文件不是一個目錄,並且滿足其他與系統有關的標準,那麼該文件是標準 文件。由 Java 應用程序創建的所有非目錄文件一定是標準文件。

返回:
當且僅當此抽象路徑名錶示的文件存在且 是一個標準文件時,返回 true;否則返回 false

public boolean isHidden( )

測試此抽象路徑名指定的文件是否是一個隱藏文件。隱藏 的具體定義與系統有關。在 UNIX 系統上,如果文件名以句點字符 (‘.’) 開頭,則認爲該文件被隱藏。在 Microsoft Windows 系統上,如果在文件系統中文件被標記爲隱藏,則認爲該文件被隱藏。

返回:
當且僅當此抽象路徑名錶示的文件根據底層平臺約定是隱藏文件時,返回 true

public boolean canExecute( )

測試應用程序是否可以執行此抽象路徑名錶示的文件。

返回:
當且僅當抽象路徑名存在且 允許應用程序執行文件時返回 true。

public boolean canRead( )

測試應用程序是否可以讀取此抽象路徑名錶示的文件。

返回:
當且僅當此抽象路徑名指定的文件存在且 可被應用程序讀取時,返回 true;否則返回 false

public boolean canWrite( )

測試應用程序是否可以修改此抽象路徑名錶示的文件。

返回:
當且僅當文件系統實際包含此抽象路徑名錶示的文件且 允許應用程序對該文件進行寫入時,返回 true;否則返回 false。

public boolean exists( )

測試此抽象路徑名錶示的文件或目錄是否存在。

返回:
當且僅當此抽象路徑名錶示的文件或目錄存在時,返回 true;否則返回 false

刪除文件方法

public boolean delete( )

刪除此抽象路徑名錶示的文件或目錄。如果此路徑名錶示一個目錄,則該目錄必須爲空才能刪除。

返回:
當且僅當成功刪除文件或目錄時,返回 true;否則返回 false

public void deleteOnExit( )

在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。 文件(或目錄)將以與註冊相反的順序刪除。調用此方法刪除已註冊爲刪除的文件或目錄無效。根據 Java 語言規範中的定義,只有在虛擬機正常終止時,纔會嘗試執行刪除操作。
一旦請求了刪除操作,就無法取消該請求。所以應小心使用此方法。

操作文件方法

public File[] listFiles( )

返回一個抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件。
如果此抽象路徑名不表示一個目錄,那麼此方法將返回 null。否則返回一個 File 對象數組,每個數組元素對應目錄中的每個文件或目錄。表示目錄本身及其父目錄的名稱不包括在結果中。得到的每個抽象路徑名都是根據此抽象路徑名,使用 File(File, String) 構造方法構造的。所以,如果此路徑名是絕對路徑名,那麼得到的每個路徑名都是絕對路徑名;如果此路徑名是相對路徑名,那麼得到的每個路徑名都是相對於同一目錄的路徑名。

不保證所得數組中的相同字符串將以特定順序出現,特別是不保證它們按字母順序出現。

返回:
抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件和目錄。如果目錄爲空,那麼數組也將爲空。如果抽象路徑名不表示一個目錄,或者發生 I/O 錯誤,則返回 null。

public String toString( )

返回此抽象路徑名的路徑名字符串。該字符串就是 getPath() 方法返回的字符串。

public String[] list(FilenameFilter filter)返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。除了返回數組中的字符串必須滿足過濾器外,此方法的行爲與 list() 方法相同。如果給定 filter 爲 null,則接受所有名稱。否則,當且僅當在此抽象路徑名及其表示的目錄中的文件名或目錄名上調用過濾器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 時,該名稱才滿足過濾器。

返回:
字符串數組,這些字符串指定此抽象路徑名錶示的目錄中給定 filter 能接受的文件和目錄。如果目錄爲空,或者沒有名稱被過濾器接受,那麼該數組將爲空。如果抽象路徑名不表示一個目錄,或者發生 I/O 錯誤,則返回 null。

public static File[] listRoots( )

列出可用的文件系統根。
特定 Java 平臺可以支持零個或更多個分層組織的文件系統。每個文件系統有一個 root 目錄,可以從這裏到達文件系統中的所有其他文件。例如,Windows 平臺爲每個活動驅動器提供了一個根目錄;UNIX 平臺只有一個根目錄,即 “/”。可用文件系統根的設置受各種系統級操作的影響,比如可移動介質的插入和彈出,以及斷開或卸載那些物理磁盤或虛擬磁盤。

此方法返回一個 File 對象數組,這些對象表示可用文件系統根的根目錄。可以保證本地機器上物理存在的任何文件的規範路徑名都以此方法返回的根之一開始。

返回:
表示可用文件系統根的 File 對象數組;如果無法確定根集,則返回 null。如果沒有文件系統,那麼該數組將爲空。

發佈了20 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章