遍歷文件夾

import java.io.File; import java.util.ArrayList; import java.util.concurrent.LinkedBlockingQueue;java

/** 遍歷文件夾 */.net

public class TraversalFolder {

/**
 * 深度優先遍歷文件夾
 * <p>
 * 要點:使用遞歸的方式來實現。
 *
 * [@param](https://my.oschina.net/u/2303379) topFile
 * [@param](https://my.oschina.net/u/2303379) orderedList
 */
public static void depthFirstSearch(File topFile, ArrayList<File> orderedList) {

    if (null != topFile) {
        if (topFile.isDirectory()) {
            File[] files = topFile.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    depthFirstSearch(file, orderedList);
                } else {
                    orderedList.add(file);
                }
            }
        } else {
            orderedList.add(topFile);
        }
    }
}

/**
 * 廣度優先遍歷文件夾
 * <p>
 * 要點:利用棧的先進後出的特色來實現。
 *
 * [@param](https://my.oschina.net/u/2303379) topFile
 * [@param](https://my.oschina.net/u/2303379) orderedList
 * [@param](https://my.oschina.net/u/2303379) maxNum
 */
public static void breadthFirstSearch(File topFile, ArrayList<File> orderedList, int maxNum) {

    if (null != topFile) {

        LinkedBlockingQueue<File> queue = new LinkedBlockingQueue<File>(maxNum);
        queue.offer(topFile);

        while (!queue.isEmpty()) {

            File file = queue.poll();
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (File f : files) {
                    if (f.isDirectory()) {
                        queue.offer(f);
                    } else {
                        orderedList.add(f);
                    }
                }
            } else {
                orderedList.add(file);
            }
        }
    }
}


public static void main(String[] args) {

    String path = "C:\\Users\\jxn\\Desktop\\新建文件夾(3)";
    File topFile = new File(path);

    ArrayList<File> orderedList = new ArrayList<>();

//        depthFirstSearch(topFile,orderedList);
    breadthFirstSearch(topFile, orderedList, 100);

    orderedList.stream().forEach((x) -> {
        System.out.println(x.getAbsoluteFile());
    });

}

}code

相關文章
相關標籤/搜索