1. 程式人生 > 其它 >Java IO流06:File類和FileFilter介面

Java IO流06:File類和FileFilter介面

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