Java遍曆檔案夾的兩種方法(非遞迴和遞迴) .

來源:互聯網
上載者:User

 

import java.io.File;
import java.util.LinkedList;
public class FileSystem {
 
 public static int num;
 
    public static void main(String[] args) {
       
        long a = System.currentTimeMillis();
        //String path="c:";
        num=0;
        String[] lists={"c:","d:"};
        /*
        for(int i=0;i<lists.length;i++){
         File file=new File(lists[i]);
         scanDirRecursion(file);
        */
        for(int i=0;i<lists.length;i++){
            scanDirNoRecursion(lists[i]);
        }
       
        System.out.print("檔案總數:"+num);
        System.out.print("總耗時:");
        System.out.println(System.currentTimeMillis() - a);
    }
   

    //非遞迴
    public static void scanDirNoRecursion(String path){
     LinkedList list = new LinkedList();
        File dir = new File(path);
        File file[] = dir.listFiles();
        for (int i = 0; i < file.length; i++) {
            if (file[i].isDirectory())
                list.add(file[i]);
            else{
                System.out.println(file[i].getAbsolutePath());
                num++;
            }
        }
        File tmp;
        while (!list.isEmpty()) {
            tmp = (File)list.removeFirst();//首個目錄
            if (tmp.isDirectory()) {
                file = tmp.listFiles(); 
                if (file == null)
                    continue;
                for (int i = 0; i < file.length; i++) {
                    if (file[i].isDirectory())
                        list.add(file[i]);//目錄則加入目錄列表,關鍵
                    else{
                        System.out.println(file[i]);
                        num++;
                    }
                }
            } else {
                System.out.println(tmp);
                num++;
            }
        }
    }

 //遞迴  
 public static void scanDirRecursion(File file) {
   try {
    if (file.canRead()) {
     if (file.isDirectory()) {
      String[] files = file.list();
      if (files != null) {
       for (int i = 0; i < files.length; i++) {
        scanDirRecursion(new File(file, files[i]));
       }
      }
     } else {
      //if (file.getName().endsWith("ppt"))
       System.out.println(file);
       num++;
     }
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
 }
}
測試:

(1)遞迴: 檔案總數:189497  總耗時:39328

(2)非遞迴:檔案總數:189432 總耗時:37469

非遞迴相對要好

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.