Java递归和非递归遍历目录

来源:互联网 发布:淘宝在美国 编辑:程序博客网 时间:2024/04/30 11:14
package cn.yws.getfilepath;import java.io.File;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;/** * Java递归和非递归遍历目录 * @author Administrator * */public class FileSystem {public static void main(String[] args) {long a = System.currentTimeMillis();List<File> resultfiles = new ArrayList<File>();String[] lists = { "D:\\android\\androidNDK" };/*for (int i = 0; i < lists.length; i++) {File file = new File(lists[i]);scanDirRecursion(file, resultfiles, "java");}for (File file : resultfiles) {System.out.println(file.getAbsolutePath());}*/for (int i = 0; i < lists.length; i++) {File file = new File(lists[i]);scanDirNoRecursion(file, resultfiles, "java");}for (File file : resultfiles) {System.out.println(file.getAbsolutePath());}System.out.print("文件总数:" + resultfiles.size());System.out.print("总耗时:");System.out.println((System.currentTimeMillis() - a) + "ms");System.out.println((System.currentTimeMillis() - a) / 1000 + "s");}/** * 非递归遍历目录 *  * @param file *            文件目录 * @param resultfiles *            保存返回的结果集 * @param endWith *            为null,则返回所有文件,不为空,则返回所匹配的文件 */public static void scanDirNoRecursion(File dir, List<File> resultfiles,String endWith) {LinkedList<File> list = new LinkedList<File>();File file[] = dir.listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);else {// System.out.println(file[i].getAbsolutePath());if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase())) {resultfiles.add(file[i]);}}}File tmp;while (!list.isEmpty()) {tmp = list.removeFirst();// 首个目录if (tmp.isDirectory()) {file = tmp.listFiles();if (file == null)continue;for (int i = 0; i < file.length; i++) {if (file[i].isDirectory())list.add(file[i]);// 目录则加入目录列表,关键else {// System.out.println(file[i]);if (endWith != null) {if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase()))resultfiles.add(file[i]);} else {resultfiles.add(file[i]);}}}} else {// System.out.println(tmp);if (endWith != null) {if (tmp.getName().toLowerCase().endsWith(endWith.toLowerCase()))resultfiles.add(tmp);} else {resultfiles.add(tmp);}}}}/** * 递归遍历目录 *  * @param file *            文件目录 * @param resultfiles *            保存返回的结果集 * @param endWith *            为null,则返回所有文件,不为空,则返回所匹配的文件 */public static void scanDirRecursion(File file, List<File> resultfiles,String endWith) {try {if (file.canRead()) {if (file.isDirectory()) {String[] files = file.list();if (files != null) {for (int i = 0; i < files.length; i++) {scanDirRecursion(new File(file, files[i]),resultfiles, endWith);}}} else {// System.out.println(file);if (endWith != null) {if (file.getName().toLowerCase().endsWith(endWith.toLowerCase()))resultfiles.add(file);} else {resultfiles.add(file);}}}} catch (Exception e) {e.printStackTrace();}}}

0 0
原创粉丝点击