零、思路解析
对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历。
一、代码
/** * 非递归的方式获取目录中的所有文件<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; }