標籤:
目錄是管理檔案的特殊機制,同類檔案儲存在同一個目錄下不僅可以簡化檔案管理,而且還可以提高工作效率。Java 語言在 java.io 包中定義了一個 File 類專門用來管理磁碟檔案和目錄。
每個 File 類對象表示一個磁碟檔案或目錄,其對象屬性中包含了檔案或目錄的相關資訊。通過調用 File 類提供的各種方法,能夠建立、刪除、重名名檔案、判斷檔案的讀寫權限以及是否存在,設定和查詢檔案的最近修改時間等。不同作業系統具有不同的檔案系統組織方式,通過使用 File 類對象,Java 程式可以用與平台無關的、統一的方式來處理檔案和目錄。
建立 File 類的對象
建立 File 類對象需要給出其所對應的檔案名稱或目錄名,File 類的構造方法如表 10-9 所示。
表 10-9 File 類的構造方法
| 構造方法 |
功能描述 |
| public File(String path) |
指定與 File 對象關聯的檔案或目錄名,path 可以包含路徑及檔案和目錄名 |
| public File(String path, String name) |
以 path 為路徑,以 name 為檔案或目錄名建立 File 對象 |
| public File(File dir, String name) |
用現有的 File 對象 dir 作為目錄,以 name 作為檔案或目錄名建立 File 對象 |
| public File(UR ui) |
使用給定的統一資源定位器來定位檔案 |
在使用 File 類的構造方法時,需要注意下面幾點:
(1)path 參數可以是絕對路徑,也可以是相對路徑,也可以是磁碟上的某個目錄。
( 2)由於不同作業系統使用的目錄分隔字元不同,可以使用 System 類的一個靜態變數System.dirSep,來實現在不同作業系統下都通用的路徑。如:
"d:"+System.dirSep+"myjava"+System.dirSep+"file"
擷取屬性和操作
藉助 File 對象,可以擷取檔案和相關目錄的屬性資訊並可以對其進行管理和操作。表 10-10列出了其常用的方法及說明。
表 10-10 File 的常用方法
| 方法 |
功能描述 |
| boolean canRead() |
如果檔案可讀,返回真,否則返回假 |
| boolean canWrite() |
如果檔案可寫,返回真,否則返回假 |
| boolean exists() |
判斷檔案或目錄是否存在 |
| boolean createNewFile() |
若檔案不存在,則建立指定名字的空檔案,並返回真,若不存在返回假 |
| boolean isFile() |
判斷對象是否代表有效檔案 |
| boolean isDirectory() |
判斷對象是否代表有效目錄 |
| boolean equals(File f) |
比較兩個檔案或目錄是否相同 |
| string getName() |
返迴文件名或目錄名的字串 |
| string getPath() |
返迴文件或目錄路徑的字串 |
| long length() |
返迴文件的位元組數,若 File 對象代表目錄,則返回 0 |
| long lastModified() |
返迴文件或目錄最近一次修改的時間 |
| String[] list() |
將目錄中所有檔案名稱儲存在字串數組中並返回,若 File 對象不是目錄返回 null |
| boolean delete() |
刪除檔案或目錄,必須是空目錄才能刪除,刪除成功返回真,否則返回假 |
| boolean mkdir() |
建立目前的目錄的子目錄,成功返回真,否則返回假 |
| boolean renameTo(File newFile) |
將檔案重新命名為指定的檔案名稱 |
【例 10-11】判斷輸入的絕對路徑是代表一個檔案或一個目錄。若是檔案輸出此檔案的絕對路徑,並判斷此檔案的檔案屬性(是否可讀寫或隱藏);若是目錄則輸出該目錄下所有檔案(不包括隱藏檔案)。
1 【例 10-11】判斷輸入的絕對路徑是代表一個檔案或一個目錄。若是檔案輸出此檔案的絕對路徑,並判斷此檔案的檔案屬性(是否可讀寫或隱藏);若是目錄則輸出該目錄下所有檔案(不包括隱藏檔案)。 2 //********** ep10_11.java ********** 3 import java.io.*; 4 class ep10_11{ 5 public static void main(String args[]) throws IOException{ 6 String FilePath; 7 InputStreamReader in=new InputStreamReader(System.in); 8 BufferedReader a=new BufferedReader(in); 9 System.out.println("請輸入一個絕對路徑:");10 FilePath=a.readLine(); //將 FilePath 作為輸入值11 File FileName=new File(FilePath); //獲得此路徑的檔案名稱12 if (FileName.isDirectory()){ //判斷此檔案是否為目錄13 System.out.println((FileName.getName())+"為一個目錄");14 System.out.println("================");15 File FileList[]=FileName.listFiles(); //將目錄下所有檔案存入數組16 for(int i=0;i<FileList.length;i++){17 if(FileList[i].isHidden()==false){ //判斷是否為隱藏檔案18 System.out.println(FileList[i].getName()); //輸出非隱藏檔案19 }20 }21 }22 else{23 System.out.println((FileName.getName())+"為一個檔案");24 System.out.println("================");25 //獲得檔案絕對路徑26 System.out.println("絕對路徑為:"+FileName.getAbsolutePath());27 //判斷此檔案是否可讀取28 System.out.println(FileName.canRead()?"可讀取":"不可讀取");29 //判斷此檔案是否可修改30 System.out.println(FileName.canWrite()?"可修改":"不可修改");31 //判斷此檔案是否為隱藏32 System.out.println(FileName.isHidden()?"為隱藏檔案":"非隱藏檔案");33 }34 }35 }
運行結果 10-11 所示:
圖 10-11 輸入一個檔案路徑後例 10_11 的運行結果
系列文章:Java知多少(上)Java知多少(39)interface介面Java知多少(40)介面和抽象類別的區別Java知多少(41)泛型詳解Java知多少(42)泛型萬用字元和型別參數的範圍Java知多少(43)異常處理基礎Java知多少(44)異常類型Java知多少(45)未被捕獲的異常Java知多少(46)try和catch的使用Java知多少(47)多重catch語句的使用Java知多少(48)try語句的嵌套Java知多少(49)throw:異常的拋出Java知多少(50)Java throws子句Java知多少(51)finallyJava知多少(52)內建異常Java知多少(53)使用Java建立自己的異常子類Java知多少(54)斷言詳解Java知多少(55)線程Java知多少(56)執行緒模式Java知多少(57)主線程Java知多少(58)線程Runnable介面和Thread類詳解Java知多少(59)建立多線程Java知多少(60)isAlive()和join()的使用Java知多少(61)線程優先順序Java知多少(62)線程同步Java知多少(63)線程間通訊Java知多少(64)線程死結Java知多少(65)線程的掛起、恢複和終止Java知多少(66)輸入輸出(IO)和流的概述Java知多少(67)面向字元的輸入資料流Java知多少(68)面向字元的輸出資料流Java知多少(69)面向位元組的輸入輸出資料流Java知多少(70)面向位元組流的應用
Java知多少(71)檔案與目錄管理