Java IO流06:File類和FileFilter介面
阿新 • • 發佈:2021-09-13
File類
File類代表物理碟符中的一個檔案或資料夾
其不具有從檔案讀取資訊和向檔案寫入資訊的功能,它僅描述檔案本身的屬性
import java.io.File; import java.io.IOException; import java.util.Arrays; public class Hello{ public static void main(String[] args) throws IOException { //建立檔案時必須丟擲異常 //File.pathSeparator生成路徑分隔符; System.out.println("路徑分隔符" + File.pathSeparator); //File.separator生成名稱分隔符\ System.out.println("名稱分隔符" + File.separator); //先建立File類的物件,才能對檔案進行操作 File f1 = new File("1.txt"); File f2 = new File("1"); File f3 = new File("."); //exists()方法判斷檔案或目錄是否存在 //createNewFile()方法建立檔案,返回true if (! f1.exists()) { System.out.println(f1.createNewFile()); } //mkdir()方法建立目錄,返回true(mkdirs()方法可以建立多級目錄) System.out.println(f2.mkdir()); //isDirectory()方法判斷是否是目錄 System.out.println(f2.isDirectory()); //delete()方法刪除檔案或目錄,返回true(只能刪除空目錄,多級目錄只能刪除最裡層那個) System.out.println(f2.delete()); //isFile()方法判斷是否是檔案 System.out.println(f1.isFile()); //getName()方法獲取檔名 System.out.println(f1.getName()); //getPath()方法獲取檔案相對路徑 System.out.println(f1.getPath()); //getAbsolutePath()方法獲取檔案絕對路徑 System.out.println(f1.getAbsolutePath()); //length()方法獲取檔案大小 System.out.println(f1.length()); //canWrite()方法判斷檔案是否可寫 System.out.println(f1.canWrite()); //list()方法返回當前路徑下所有檔案和資料夾的名稱,儲存為陣列 System.out.println(Arrays.toString(f3.list())); } }
FileFilter介面
當呼叫File類中的listFiles()方法時,支援傳入FileFilter介面實現類的物件作為引數,對獲取的檔案進行過濾
import java.io.File; import java.io.FileFilter; public class Hello{ public static void main(String[] args) { File f2 = new File("1"); System.out.println(f2.mkdir()); //FileFilter實現類可以自定義選擇檔案的條件 File[] files = f2.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.getName().endsWith(".jpg")) { return true; } return false; } }); for (File f : files){ System.out.println(f.getName()); } } }
練習:遞迴列印資料夾所有檔案路徑,和刪除所有檔案
import java.io.File; public class Hello{ public static void main(String[] args) { File file = new File("d:\\JAVA"); test(file); } //要遞迴列印和刪除,因此要建立一個方法來呼叫 public static void test(File file){ File[] list = file.listFiles(); if (list != null){ for (File fi : list) { if (fi.isDirectory()){ //採用遞迴判斷子檔案是否為目錄 test(fi); } else { System.out.println(fi.getName()); System.out.println(fi.delete()); } } } //先把所有檔案刪除以後,才能刪除目錄 System.out.println(file.delete()); } }