Java非遞歸的方式獲取目錄中所有文件(包括目錄)
阿新 • • 發佈:2017-05-08
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非遞歸的方式獲取目錄中所有文件(包括目錄)