1. 程式人生 > >ava刪除目錄及目錄下所有檔案、資料夾(非遞迴)

ava刪除目錄及目錄下所有檔案、資料夾(非遞迴)

方法一:

public static void deleteFiles(File srcFile) {

    if (srcFile.exists()) {

        File[] files;
        //存放資料夾
        LinkedList<File> directoryList = new LinkedList<>();
        ArrayList<File> directories = new ArrayList<>();

        delete(srcFile, directoryList);

        while (!directoryList.isEmpty()) {

            //取出第一個directoryList集合中的資料夾
            File directory = directoryList.removeFirst();
            //把取出的資料夾放到directories集合中
            directories.add(directory);
            files = directory.listFiles();

            if (files != null) {
                for (File f : files) {
                    delete(f, directoryList);
                }
            }
        }

        //這時所有非資料夾都刪光了,可以直接刪檔案夾了(注意從後往前遍歷)
        for (int j = directories.size() - 1; j >= 0; j--) {
            directories.get(j).delete();
        }
    }

}

private static void delete(File f, LinkedList<File> list) {
    if (f.isDirectory()) {
        list.add(f);
    } else {
        f.delete();
    }
}

上面分成兩塊太醜了 於是 方法二:

public static void deleteFiles(File srcFile) {

    if (srcFile.exists()) {
    
        boolean flag = true;//標記原始檔或原始檔夾用
        File[] files;
        //存放資料夾
        LinkedList<File> directoryList = new LinkedList<>();
        ArrayList<File> directories = new ArrayList<>();

        while (!directoryList.isEmpty() || flag) {

            if (flag) {
                files = new File[]{srcFile};
                flag = false;
            } else {
                //取出第一個directoryList集合中的資料夾
                File directory = directoryList.removeFirst();
                //把取出的資料夾放到directories集合中
                directories.add(directory);
                files = directory.listFiles();
            }

            if (files != null) {
                for (File f : files) {
                    if (f.isDirectory()) {
                        directoryList.add(f);
                    } else {
                        f.delete();
                    }
                }
            }
        }
        //這時所有非資料夾都刪光了,可以直接刪檔案夾了(注意從後往前遍歷)
        for (int j = directories.size() - 1; j >= 0; j--) {
            directories.get(j).delete();
        }
    }

}