io-File類
阿新 • • 發佈:2020-06-29
File類
概述
java.io.File 類是檔案和目錄路徑名的抽象表示,主要用於檔案和目錄的建立、查詢和刪除等操作
java把電腦中的檔案和資料夾(目錄)封裝為了一個 File 類 ,我們可以使用 File 類對檔案和資料夾進行操作
我們可以使用 File 類的方法
- 建立一個檔案 / 資料夾
- 刪除檔案 / 資料夾
- 獲取檔案 / 資料夾
- 判斷檔案 / 資料夾是否存在
- 對資料夾進行遍歷
- 獲取檔案的大小
File 類是一個與系統無關的類,任何的作業系統都可以使用這個類中的方法
重點:記住這三個單詞
- file:檔案
- directory:資料夾/目錄
- path:路徑
靜態成員變數
static String pathSeparator
- 與系統有關的路徑分隔符,為了方便,它被表示為一個字串
static char pathSeparatorChar
- 與系統有關的路徑分隔符
static String separator
- 與系統有關的預設名稱分隔符,為了方便,它被表示為一個字串
static char separatorchar
- 與系統有關的預設名稱分隔符
不同系統中,路徑分隔符,名稱分隔符的表示是不一樣的
- 比如:
- 路徑分隔符:windows:分號; linux:冒號:
- 檔名稱分隔符:windows:反斜槓\ linux:正斜槓/
- 因此在今後日常的開發中,不建議將檔案 / 資料夾的操作路徑寫死
路徑
絕對路徑
絕對路徑是一個完整的路徑,以碟符(c:,D:)開始的路徑
相對路徑
相對路徑是一個簡化的路徑,相對指的是相對於當前專案的根目錄
如果使用當前專案的根目錄,路徑可以簡化書寫,可以省略專案的根目錄
注意
- 路徑是不區分大小寫
- 路徑中的檔名稱分隔符
- Windows使用反斜槓,但是反斜槓是轉義字元,所以要用兩個反斜槓代表一個普通的反斜槓
構造方法
public File(String pathname);
- 通過將給定的路徑名字串轉換為抽象路徑名來建立新的 Flle 例項
- 引數:
- String pathname:字串型別的路徑名稱
- 路徑可以是以檔案結尾,也可以是以資料夾結尾
- 路徑可以是相對路徑,也可以是絕對路徑
- 路徑可以是存在,也可以是不存在
- 建立 File 物件,只是把字串路徑封裝為 File 物件,不考慮路徑的真假情況
public File(String parent, String child);
- 從父路徑名字串和子路徑名字串建立新的 Flle 例項
- 引數:
- 把路徑分成了兩部分
- String parent:父路徑
- String child:子路徑
- 好處:
- 父路徑和子路徑可以單獨書寫,使用起來非常靈活
- 父路徑和子路徑都可以變化
public File(File parent, string child);
- 從父抽象路徑名和子路徑名字串建立新的 File 例項
- 引數:
- 把路徑分成了兩部分
- FiLe parent:父路徑
- String child:子路徑
- 好處:
- 父路徑和子路徑可以單獨書寫,使用起來非常靈活
- 父路徑和子路徑都可以變化
- 父路徑是 File 型別,可以使用 File 的方法對路徑進行一些操作,再使用路徑建立物件
常用方法
獲取功能的方法
-
public string getAbsolutePath();
- 返回此 File 的絕對路徑名字串
- 獲取的構造方法中傳遞的路徑
- 無論路徑是絕對的還是相對的,getAbsolutePath 方法返回的都是【絕對路徑】
-
public string getPath();
-
將此 File 轉換為路徑名字串
-
File 重寫的 toString 方法呼叫的就是 getPath 方法
public String tostring() { return getPath(); }
-
-
public string getName();
- 返回由此 File 表示的檔案或目錄的名稱
- 獲取的就是構造方法傳遞路徑的結尾部分(檔案 / 資料夾)
-
public long length()
- 返回由此 File 表示的檔案的長度
- 獲取的是構造方法指定的檔案的大小,以位元組為單位
- 注意:
- 資料夾是沒有大小概念的,不能獲取資料夾的大小
- 如果構造方法中給出的路徑不存在,那麼 length 方法返回 0
判斷功能的方法
public boolean exists();
- 此 File 表示的檔案或目錄是否實際存在
public boolean isDirectory();
- 此 File 表示的是否為目錄
- 用於判斷構造方法中給定的路徑是否以資料夾結尾
public boolean isFile();
- 此 File 表示的是否為檔案
- 用於判斷構造方法中給定的路徑是否以檔案結尾
注意:
- 電腦的硬碟中只有檔案 / 資料夾,isDirectory 和 isFile 兩個方法是互斥的
- isDirectory 和 isFile 兩個方法使用前提:路徑必須是存在的。否則都返回 false
建立刪除功能的方法
public boolean createNewFile();
- 當且僅當具有該名稱的檔案尚不存在時,建立一個新的空檔案
- 建立檔案的路徑和名稱在構造方法中給出(構造方法的引數)
- 返回值:布林值
- true:檔案不存在,建立檔案,返回 true
- false:檔案存在,不會建立,返回 false
- 注意:
- 此方法只能建立檔案,不能建立資料夾
- 建立檔案的路徑必須存在,否則會丟擲異常
- createNewFile 方法宣告丟擲了 IOException,當呼叫這個方法時,就必須的處理這個異常,要麼 throws ,要麼 try-catch
public boolean delete();
- 刪除由此 File 表示的檔案或目錄
- 此方法,可以刪除構造方法路徑中給出的檔案 / 資料夾
- 返回值:布林值
- true:檔案 / 資料夾地除成功,返回 true
- false:
- 資料夾中有內容,不會刪除返回 false
- 構造方法中路徑不存在 false
- 注意:
- delete 方法是直接在硬碟刪除檔案 / 資料夾,不經過回收站,【刪除要謹慎】
public boolean mkdir();
- 建立由此 File 表示的目錄
- 建立資料夾的路徑和名稱在構造方法中給出(構造方法的引數)
- 返回值:布林值
- true:資料夾不存在,建立資料夾,返回 true
- false:
- 資料夾存在,不會建立,返回 false
- 構造方法中給出的路徑不存在返回 false
- 注意:
- 此方法只能建立資料夾,不能建立檔案
- 不會丟擲異常,但路徑不存在,也不會建立
public boolean mkdirs();
- 建立由此 File 表示的目錄,包括任何必需但不存在的父目錄
- 既可以建立單級空資料夾,也可以建立多級資料夾
目錄的遍歷
public String[] list();
- 返回一個 String 陣列,表示該 File 目錄中的所有子檔案或目錄
- 遍歷構造方法中給出的目錄,獲取目錄中所有檔案 / 資料夾的名稱,把獲取到的多個名稱儲存到一個 String 型別的陣列中
public File[] listFiles();
- 返回一個 File 陣列,表示該 File 目錄中的所有的子檔案或目錄
- 遍歷構造方法中給出的目錄,獲取目錄中所有的檔案 / 資料夾,把檔案 / 資料夾封裝為 File 物件,再把多個 File 物件儲存到 File 陣列中
注意:
- list 方法和 listFiles 方法遍歷的是構造方法中給出的目錄
- list 方法和 listFiles 方法會獲取目錄中的所有檔案,包括隱藏檔案
- 如果構造方法中給出的目錄的路徑不存在,會丟擲空指標異常
- 如果構造方法中給出的路徑不是一個目錄,也會丟擲空指標異常
檔案過濾器
在 File 類中有兩個和 listFiles 過載的方法,方法的引數傳遞的就是過濾器
public File[] listFiles(FileFilter filter);
- listFiles 方法一共做了三件事情:
- listFiles 方法會對構造方法中傳遞的目錄進行追歷,獲取目錄中的每一個 檔案 / 資料夾,封裝為 File 物件
- listFiles 方法會呼叫引數傳遞的過濾器中的 accept 方法
- listFiles 方法會把遍歷得到的每一個 File 物件傳遞過 accept 方法的引數 pathname
- listFiles 方法一共做了三件事情:
FileFilter
-
java.io. FileFilter 介面:用於抽象路徑名(File 物件)的過濾器
-
作用:用來過濾檔案(File物件)
具有一個抽象方法:用來過濾檔案的方法
-
boolean accept(File pathname);
- 測試指定抽象路徑名是否應該包含在某個路徑名列表中。
- 引數:
- File pathname:使用 listFiles 方法遍歷目錄,得到的每一個檔案物件
- 返回值:
- accept 方法返回值是一個布林值
- true:就會把傳遞過去的 File 物件儲存到 File 陣列中
- false:就不會把傳遞過去的 File 物件儲存到 File 陣列中
-
public FiLe[] listFiles(FilenameFilter filter);
FilenameFilter
- java.io.FilenameFilter 介面:實現此介面的類例項可用於過濾器檔名
- 作用:用於過濾檔名稱
具有一個抽象方法:用來過濾檔案的方法
boolean accept(File dir, String name);
- 測試指定檔案是否應該包含在某一檔案列表中
- 引數:
- File dir:構造方法中傳遞的被遍歷的目錄
- String name:使用 listFiles 方法遍歷目錄,獲取的每一個檔案 / 資料夾的名稱
注意
- 兩個過濾器介面都是沒有實現類的,需要我們自己寫實現類,重寫過濾的 accept 方法,在方法中自己定義過濾的規則
- 使用過濾器必須明確兩件事情:
- 過濾器中的 accept 方法是誰呼叫的
- accept 方法的引數 pathname 是什麼
- 兩個過濾器介面都是函式式介面,可以簡化適用 Lambda 表示式