Java中的File類
1.File類的靜態成員變數:
1.static String pathSeparator 與系統有關的路徑分隔符,為了方便,它被表示為一個字串。
2.static char pathSeparatorChar 與系統有關的路徑分隔符。
3.static String separator 與系統有關的預設名稱分隔符,為了方便,它被表示為一個字串。
4.static char separatorChar 與系統有關的預設名稱分隔符。
import java.io.File; public class FileDemo { public static void main(String[] args) { String s1 = File.pathSeparator; System.out.println(s1);//列印結果為;在linux中是: String s2 = File.separator; System.out.println(s2);//列印結果為\如果是Linux系統則為 / } }
2.File類的構造方法:
在同一個案例中演示這三個構造方法:
import java.io.File; public class FileDemo { public static void main(String[] args) { String pathName = "e:\\java_code\\day22e\\hello.java"; File f1 = new File(pathName);//將Test22檔案封裝成File物件。注意;有可以封裝不存在檔案或者資料夾,變成物件。 System.out.println(f1); File f2 = new File("e:\\java_code\\day22e","hello.java"); System.out.println(f2); //將parent封裝成file物件。 File dir = new File("e:\\java_code\\day22e"); File f3 = new File(dir,"hello.java"); System.out.println(f3); } }//輸出的都是e:\\java_code\\day22e\\hello.java
3.java API中介紹的方法:(常用的標上了顏色)
- boolean canExecute()測試應用程式是否可以執行此抽象路徑名錶示的檔案。
- boolean canRead()測試應用程式是否可以讀取此抽象路徑名錶示的檔案。
- boolean canWrite()測試應用程式是否可以修改此抽象路徑名錶示的檔案。
- int compareTo(File pathname)按字母順序比較兩個抽象路徑名。
- boolean createNewFile()當且僅當不存在具有此抽象路徑名指定名稱的檔案時,不可分地建立一個新的空檔案。
- static File createTempFile(String prefix, String suffix)在預設臨時檔案目錄中建立一個空檔案,使用給定字首和字尾生成其名稱。
- static File createTempFile(String prefix, String suffix, File directory)在指定目錄中建立一個新的空檔案,使用給定的字首和字尾字串生成其名稱。
- boolean delete()刪除此抽象路徑名錶示的檔案或目錄。//注意:這個刪除,不走回收站,直接刪除,所以要小心使用。
- void deleteOnExit()在虛擬機器終止時,請求刪除此抽象路徑名錶示的檔案或目錄。
- boolean equals(Object obj)測試此抽象路徑名與給定物件是否相等。
- boolean exists()測試此抽象路徑名錶示的檔案或目錄是否存在。
- File getAbsoluteFile()返回此抽象路徑名的絕對路徑名形式。
- String getAbsolutePath()返回此抽象路徑名的絕對路徑名字串。
- File getCanonicalFile()返回此抽象路徑名的規範形式。
- String getCanonicalPath()返回此抽象路徑名的規範路徑名字串。
- long getFreeSpace()返回此抽象路徑名指定的分割槽中未分配的位元組數。
- String getName()返回由此抽象路徑名錶示的檔案或目錄的名稱。
- String getParent()返回此抽象路徑名父目錄的路徑名字串;如果此路徑名沒有指定父目錄,則返回 null 。
- File getParentFile()返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null。
- String getPath()將此抽象路徑名轉換為一個路徑名字串。
- long getTotalSpace()返回此抽象路徑名指定的分割槽大小。
- long getUsableSpace()返回此抽象路徑名指定的分割槽上可用於此虛擬機器的位元組數。
- int hashCode()計算此抽象路徑名的雜湊碼。
- boolean isAbsolute()測試此抽象路徑名是否為絕對路徑名。
- boolean isDirectory()測試此抽象路徑名錶示的檔案是否是一個目錄。
- boolean isFile()測試此抽象路徑名錶示的檔案是否是一個標準檔案。
- boolean isHidden()測試此抽象路徑名指定的檔案是否是一個隱藏檔案。
- long lastModified()返回此抽象路徑名錶示的檔案最後一次被修改的時間。
- long length()返回由此抽象路徑名錶示的檔案的長度。位元組數
- String[] list()返回一個字串陣列,這些字串指定此抽象路徑名錶示的目錄中的檔案和目錄。 //遍歷目錄返回的只有名字
- String[] list(FilenameFilter filter)返回一個字串陣列,這些字串指定此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄。
- File[] listFiles()返回一個抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中的檔案。 //返回路徑全名 推薦
- File[] listFiles(FileFilter filter)返回抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄。
- File[] listFiles(FilenameFilter filter)返回抽象路徑名陣列,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的檔案和目錄。
- static File[] listRoots()列出可用的檔案系統根。
- boolean mkdir()建立此抽象路徑名指定的目錄。呼叫該方法時,File物件必須對應一個路徑,而不是檔案//只能建立一個目錄
- boolean mkdirs()建立此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。//即可建立一個目錄,也可建立多及目錄,推薦
- boolean renameTo(File dest)重新命名此抽象路徑名錶示的檔案。
- boolean setExecutable(boolean executable)設定此抽象路徑名所有者執行許可權的一個便捷方法。
- boolean setExecutable(boolean executable, boolean ownerOnly)設定此抽象路徑名的所有者或所有使用者的執行許可權。
- boolean setLastModified(long time)設定此抽象路徑名指定的檔案或目錄的最後一次修改時間。
- boolean setReadable(boolean readable)設定此抽象路徑名所有者讀許可權的一個便捷方法。
- boolean setReadable(boolean readable, boolean ownerOnly)設定此抽象路徑名的所有者或所有使用者的讀許可權。
- boolean setReadOnly()標記此抽象路徑名指定的檔案或目錄,從而只能對其進行讀操作。
- boolean setWritable(boolean writable)設定此抽象路徑名所有者寫許可權的一個便捷方法。
- boolean setWritable(boolean writable, boolean ownerOnly)設定此抽象路徑名的所有者或所有使用者的寫許可權。
- String toString()返回此抽象路徑名的路徑名字串。
- URI toURI()構造一個表示此抽象路徑名的 file: URI。
- URL toURL()已過時。 此方法不會自動轉義 URL 中的非法字元。建議新的程式碼使用以下方式將抽象路徑名轉換為 URL:首先通過 toURI 方法將其轉換為 URI,然後通過 URI.toURL 方法將 URI 裝換為 URL。
下面介紹幾個常用的方法:
import java.io.File; public class FileDemo { public static void main(String[] args) { //建立檔案物件 File file = new File("Test22.java");//建立檔案物件,將其封裝成file類物件,就可以呼叫file類的方法了 String absPath1 = file.getAbsolutePath();//獲取檔案的絕對路徑,即全路徑 返回的是String物件 File absPath2 = file.getAbsoluteFile();//獲取檔案的絕對路徑,即全路徑 返回的是File物件 String path = file.getPath();//File中封裝的路徑是什麼獲取到的就是什麼。 String filename = file.getName();//獲取檔名稱 long size = file.length();//獲取檔案大小 System.out.println("absPath1="+absPath1); System.out.println("absPath2="+absPath2); System.out.println("path="+path); System.out.println("filename="+filename); System.out.println("size="+size); } }
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { File file = new File("d:\\file.java"); boolean b = file.createNewFile(); System.out.println(b);//輸出為true,說明我的D盤下沒有file.java檔案 ,他已經自動幫我建立了一個如下圖 } }
listFiles()方法介紹
public class FileMethodDemo3 { public static void main(String[] args) { File dir = new File("e:\\java_code"); //獲取的是目錄下的當前的檔案以及資料夾的名稱。 String[] names = dir.list(); for(String name : names){ System.out.println(name); } //獲取目錄下當前檔案以及檔案物件,只要拿到了檔案物件,那麼就可以獲取其中想要的資訊 File[] files = dir.listFiles(); for(File file : files){ System.out.println(file); } } }
注意:在獲取指定目錄下的檔案或者資料夾時必須滿足下面兩個條件
1,指定的目錄必須是存在的,
2,指定的必須是目錄。否則容易引發返回陣列為null,出現NullPointerException
4.檔案過濾器
l 測試類
public class FileDemo2 { public static void main(String[] args) { //獲取副檔名為.java所有檔案 //建立File物件 File file = new File("E:\\code\\day11_code"); //獲取指定副檔名的檔案,由於要對所有檔案進行副檔名篩選,因此呼叫方法需要傳遞過濾器 File[] files = file.listFiles(new MyFileFilter()); //遍歷獲取到的所有符合條件的檔案 for (File f : files) { System.out.println(f); } } }
l 自定類繼承FilenameFilter過濾器介面
//定義類實現檔名稱FilenameFilter過濾器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }
在查閱API時,我們發現,在listFiles(FileFilter filter) 也可以接受一個FileFilter過濾器,它和我們講的FilenameFilter有啥區別呢?
FilenameFilter過濾器中的 accept方法接受兩個引數,一個當前檔案或資料夾所在的路徑,一個是當前檔案或資料夾物件的名稱。
FileFilter 過濾器中的 accept方法接受一個引數,這個引數就當前檔案或資料夾物件
當我們需要過濾檔名稱時就可以使用FilenameFilter這個過濾器,當我們想對當前檔案或資料夾進行過濾,就可以使用FileFilter ,比如需要當前目錄下的所有資料夾,就可以使用FileFilter 過濾器。
l 測試類
public class FileDemo2 { public static void main(String[] args) { //獲取副檔名為.java所有檔案 //建立File物件 File file = new File("E:\\code\\day11_code"); //獲取指定目錄下的資料夾 File[] files = file.listFiles(new FileFileterByDir()); //遍歷獲取到的所有符合條件的檔案 for (File f : files) { System.out.println(f); } } }
//自定義類繼承FileFilter過濾器介面 //檔案過濾器 class FileFileterByDir implements FileFilter{ public boolean accept(File pathname) { return pathname.isDirectory(); } }