《文件隊列》

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();
    }
}
相關文章
相關標籤/搜索