Java實現非遞歸刪除目錄


 

對比 C# 的文件系統, 發現 C# 的文件系統貌似比 Java 的東西少一點, 竟然連刪除目錄都直接作好封裝了, 想到學 Java 的時候還要本身寫遞歸刪除, 好像沒寫過非遞歸的,就在網上查了下, 關於非遞歸刪除目錄代碼沒幾個, 我就寫了一個,遞歸網上一大堆, 就不粘上來了. 下面是代碼非遞歸的方法:java

 

 1 package demo1;
 2 
 3 import java.io.File;
 4 import java.util.ArrayList;
 5 
 6 public class Demo1 {
 7     /**
 8      * 不使用遞歸刪除目錄
 9      * @param args
10      */
11     public static void main(String[] args) {
12         deleteDirectory("E:\\test");
13     }
14     
15     public static void deleteDirectory(String rootPath) {
16         //fileList模擬的是一個隊列
17         ArrayList<File> fileList = new ArrayList<File>();//存儲文件和直接子目錄包含文件的目錄
18         //directoryList模擬的是一個棧
19         ArrayList<File> directoryList = new ArrayList<File>();//存儲直接子目錄不包含文件的目錄    
20         File root = new File(rootPath);
21         if(!root.exists()){
22             System.out.println("您輸入的不是目錄");
23             return;
24         }
25         if(root.isFile()){
26             root.delete();
27             System.out.println("您輸入的是文件,已刪除成功");
28             return;
29         }
30         fileList.add(0, root);//第一次入隊列
31         
32         while(fileList.size() > 0) {
33             File dir = fileList.remove(0);//模擬一個出隊列的過程 【出隊列的也許文件,也許是目錄】
34             File[] files = dir.listFiles();
35             for (int i = 0; i < files.length; i++) {
36                 if(files[i].isFile()) files[i].delete();//若是是文件就刪除
37                 else fileList.add(files[i]);//模擬一個入隊列的過程 【若是是目錄就入隊列】 
38             }
39             directoryList.add(dir);//一次遍歷完畢,刪除了第一級的文件,模擬一個壓棧的過程【壓棧的確定是目錄,並且直接子目錄不包含文件】
40         }
41         //倒序遍歷,模擬一個彈粘的過程
42         for (int i = directoryList.size() - 1; i >= 0; i--) {
43             directoryList.get(i).delete();
44         }
45         if(!root.exists()){
46             System.out.println("您輸入的是文件夾,已刪除成功");
47         }
48     }
49 
50 }

 其實使用 LinkedList 會更好一點,由於沒有查詢的過程,只有增刪。spa

相關文章
相關標籤/搜索