ava刪除目錄及目錄下所有檔案、資料夾(非遞迴)
阿新 • • 發佈:2018-12-17
方法一:
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(); } } }