import java.io.File; import java.util.LinkedList; public class GetAllFileByQueue { /** * @param args */ public static void main(String[] args) { /* * 遍歷文件夾,不用遞歸咋辦? * 思路: * 1,能夠經過對每個目錄進行for循環,可是目錄層級不少,for會死掉。 * 2,每遍歷到一個目錄,不對其進行遍歷,而是先臨時存儲起來。 至關於把全部目錄(不管同級不一樣級)都存儲起來。 * 3,遍歷容器時取到就是目錄,而後對目錄遍歷便可。 4,從容器中取到目錄遍歷時發現內部還有目錄,同樣將這些目錄存儲到容器中。 * 5,只要不斷的遍歷這個容器就哦了。 * * 經過圖解:發現這個容器只要是一個簡單的隊列就能夠解決這個問題。 */ File dir = new File("E:\\test"); System.out.println(dir.getName()); Queue<File> queue = new Queue<File>(); // 1,對dir進行當前目錄的遍歷。 File[] files = dir.listFiles(); for (File file : files) { // 2, 若是有子目錄,存儲到隊列中。 if (file.isDirectory()) { queue.myAdd(file); } else { System.out.println(file.getName()); } } System.out.println("---------------------"); //3,遍歷隊列容器。由於子目錄都在隊列中。 while(!queue.isNull()){ File subDir = queue.myGet();//從隊列中取出子目錄。 System.out.println(subDir.getName()); //4,遍歷子目錄。 File[] subFiles = subDir.listFiles(); for(File subFile : subFiles){ if(subFile.isDirectory()){//若是子目錄中還有子目錄,繼續存儲到隊列中。 queue.myAdd(subFile); }else{ System.out.println(subFile.getName()); } } } } } /** * 隊列結構。先進先出。 */ class Queue<E> { private LinkedList<E> link; /** * 提供了構造隊列對象的構造器。 */ public Queue() { link = new LinkedList<E>(); } /** * 添加元素的方法。 */ public void myAdd(E obj) { link.addFirst(obj); } /** * 獲取的方法。 */ public E myGet() { return link.removeLast(); } /** * 判斷隊列是否有元素。 */ public boolean isNull() { return link.isEmpty(); } }