非遞歸方法實現對TB級文件目錄的全遍歷

遞歸的方法,在遞歸數量過大的時候,會致使堆棧溢出錯誤。用非遞歸方法,能夠實現。 java

package com.taoxg.test; 數組

import java.io.*;
import java.util.LinkedList;
public class LoopDir {
public static void main(String[] args) {
  long count=0;
  long countd=0;
  //鏈表
  LinkedList<File> list = new LinkedList<File>();
  File dir = new File("D://");
  File[] file = dir.listFiles();
  for (int i = 0; i < file.length; i++) {
   if (file[i].isDirectory())
    //把第一層的目錄,所有放入鏈表
    list.add(file[i]);
   else
    count++;
    System.out.println("文件"+count + ":" + file[i].getAbsolutePath());
  }
  File tmp=null;
  //循環遍歷鏈表
  while (!list.isEmpty()) {
   //把鏈表的第一個記錄刪除
   tmp = 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
     count++;
     System.out.println("文件"+count + ":" + file[i].getAbsolutePath());
    }
   } else {
    countd++;
    System.out.println("目錄["+countd+"]路徑:" +tmp.getAbsolutePath());
   }
  }
}
} oop

相關文章
相關標籤/搜索