1. 程式人生 > 實用技巧 >JavaSE學習筆記 - File類與遞迴

JavaSE學習筆記 - File類與遞迴

  • 主要用於檔案和目錄的建立、刪除和查詢等操作,Java 把電腦中的檔案封裝成了 File 類,在編寫程式碼的時候我們可以使用 File 類來對檔案或者資料夾進行操作。

分隔符

public class Main {
    public static void main(String[] args) {
        //路徑分隔符,在window中,分割兩個路徑使用 ";"
        //在linux中分割兩個路徑使用 ":"
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator); // ;

        //檔名稱分隔符,在window中檔名稱使用 "\" 來分隔
        //在linux中使用 "/" 來分隔檔名稱
        String separator = File.separator;
        System.out.println(separator);// \
    }
}

構造方法

public class Main {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\17388\\Desktop\\1.txt");
        System.out.println(file); //C:\Users\17388\Desktop\1.txt
        String parent = "C:\\Users\\17388\\Desktop";
        String child = "1.txt";
        File file1 = new File(parent, child);
        System.out.println(file1);
    }
}

常用方法

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("1.txt");
        System.out.println(file); //1.txt,toString內部呼叫了getPath
        //獲取檔案絕對路徑
        System.out.println(file.getAbsolutePath());//D:\Computer\Project\java\1.txt
        //獲取建立時的路徑
        System.out.println(file.getPath());//1.txt
        //獲取檔名
        System.out.println(file.getName());//1.txt
        //獲取檔案的位元組數,如果不是檔案或者檔案不存在返回0
        System.out.println(file.length());
        //判斷檔案是否存在
        System.out.println(file.exists());//false
        //判斷是否是檔案,路徑不存在返回false
        System.out.println(file.isFile());//false
        //判斷當前路徑是否是目錄,路徑不存在返回false
        System.out.println(file.isDirectory());//false

        //檔案不存在則建立檔案,否則不建立,只能建立檔案
        boolean flag = file.createNewFile();
        System.out.println(flag);//true
        if (file.exists()) {
            System.out.println(file.isFile());//true
            System.out.println(file.isDirectory());//false
        }

        File file1 = new File("1");
        //建立單級目錄
        boolean flag1 = file1.mkdir();
        System.out.println(flag1);//true

        File file2 = new File("11\\111");
        //建立多級目錄
        boolean flag2 = file2.mkdirs();
        System.out.println(flag2);//true

        //刪除檔案或者目錄
        System.out.println(file.delete());
        System.out.println(file1.delete());
        System.out.println(file2.delete());
    }
}

遍歷目錄

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\Computer\\Project\\java");
        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }

        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }

    }
}

遞迴讀取目錄及其子目錄檔案

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\Computer\\Project\\java");
        printAllFile(file);
    }

    private static void printAllFile(File file) {
        System.out.println(file);
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.isFile()) {
                System.out.println(file1);
            } else {
                printAllFile(file1);
            }
        }
    }
}

遞迴查詢指定條件檔案

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\Computer\\Project\\java");
        printAllFile(file);
    }

    private static void printAllFile(File file) {
        //System.out.println(file);
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.isFile()) {
                if(file1.getName().toLowerCase().endsWith(".iml")) {
                    System.out.println(file1);
                }
            } else {
                printAllFile(file1);
            }
        }
    }
}

檔案過濾器

  • 使用 FileFilter 過濾器介面,在遍歷目錄的同時,呼叫其中的 accept 方法將其中不符合要求的檔案過濾掉,然後在進行判斷輸入即可。(面向介面程式設計)
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\Computer\\Project\\java");
        printAllFile(file);
    }

    private static void printAllFile(File file) {
        //我們在遍歷目錄的同時,呼叫了過濾器中的方法,將不符合要求的檔案過濾掉
//        File[] files = file.listFiles(new FileFilter() {
//            @Override
//            public boolean accept(File pathname) {
//                if (pathname.isDirectory()) {
//                    return true;
//                } else {
//                    return pathname.getName().toLowerCase().endsWith(".iml");
//                }
//            }
//        });
//        for (File file1 : files) {
//            if(file1.isDirectory()) {
//                printAllFile(file1);
//            } else {
//                System.out.println(file1);
//            }
//        }

        File[] files1 = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return new File(dir, name).isDirectory() ||
                        name.toLowerCase().endsWith(".java");
            }
        });
        for (File file1 : files1) {
            if (file1.isDirectory()) {
                printAllFile(file1);
            } else {
                System.out.println(file1);
            }
        }

    }
}