1. 程式人生 > >Java非遞歸的方式獲取目錄中所有文件(包括目錄)

Java非遞歸的方式獲取目錄中所有文件(包括目錄)

class cto div 所有 new dir rem efi log

零、思路解析

對於給出的文件查看其下面的所有目錄,將這個目錄下的所有目錄放入待遍歷的目錄集合中,每次取出該集合中的目錄遍歷,如果是目錄再次放入該目錄中進行遍歷。

一、代碼

    /**
     * 非遞歸的方式獲取目錄中的所有文件<br>
     * 此方法獲取的路徑未按照目錄->文件方式排列
     *
     * @param dirPath 目錄路徑
     * @return 指定目錄下所有文件和目錄的集合
     */
    public static List<File> listAllFile(String dirPath) {
        LinkedList
<File> allFiles = new LinkedList<>(); if ("".equals(dirPath) || null == dirPath) { return allFiles; } File file = new File(dirPath); allFiles.add(file);//添加自己 if (file.isFile()) { return allFiles; } File[] fileList
= file.listFiles(); if (fileList == null || fileList.length == 0) { return allFiles; } //將第一次獲取到的文件和目錄放入總集合中 allFiles.addAll(Arrays.asList(fileList)); //聲明存放目錄的集合 LinkedList<File> dirCheckList = new LinkedList<>(); //處理第一層目錄 for
(File curFile : fileList) { if (curFile.isDirectory()) { dirCheckList.add(curFile); } } while (!dirCheckList.isEmpty()) { File removeDir = dirCheckList.removeFirst();//移除首位的目錄 File[] removeDirFileList = removeDir.listFiles(); if (removeDirFileList == null) { continue; } //將找出的所有的文件和目錄加入到總集合中 allFiles.addAll(Arrays.asList(removeDirFileList)); for (File curFile : removeDirFileList) { if (curFile.isDirectory()) { dirCheckList.add(curFile); } } } return allFiles; }

Java非遞歸的方式獲取目錄中所有文件(包括目錄)