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(); } }