读书人

搜寻一个目录中的指定文件(此文件可能

发布时间: 2012-12-19 14:13:15 作者: rapoo

搜索一个目录中的指定文件(此文件可能在N级子目录中)

这个问题用两种方式实现,一个是循环调用,一个是递归方法,两种方法比较,循环调用效率明显高于递归,而递归的好处就是简单,但是递归有一个致命的缺点:容易造成堆栈溢出。

import java.io.File;import java.util.LinkedList;public class Search {public static void main(String[] args){String fileName = "a.txt";File directory = new File("D:/");long a = System.currentTimeMillis();File file1 = searchFile1(fileName,directory);System.out.println((System.currentTimeMillis()-a) + ":" + file1.getAbsolutePath());long b = System.currentTimeMillis();File file2 = searchFile2(fileName,directory);System.out.println((System.currentTimeMillis()-b)+ ":" + file2.getAbsolutePath());}/* * 递归调用 */public static File searchFile1(String fileName, File directory){if(! directory.isDirectory()){if(directory.getName().equals(fileName))return directory;elsereturn null;}File[] file = directory.listFiles();File temp = null;for(int i=0; i<file.length; i++){temp = searchFile1(fileName, file[i]); if(temp == null) continue;elsereturn temp;}return null;}/* * 循环调用 */public static File searchFile2(String fileName, File directory){//long start = System.currentTimeMillis();if(! directory.isDirectory()){if(directory.getName().equals(fileName))return directory;elsereturn null;}        LinkedList<File> list = new LinkedList<File>();                File[] file = directory.listFiles();        for (int i = 0; i < file.length; i++) {            if (file[i].isDirectory()){            list.add(file[i]);            }else if(file[i].getName().equals(fileName)){            return file[i];            }        }                File temp = null;        while (! list.isEmpty()) {        temp = list.removeFirst();            if (temp.isDirectory()) {                file = temp.listFiles();                if (file == null)                    continue;                for (int i = 0; i < file.length; i++) {                if (file[i].isDirectory()){                    list.add(file[i]);                    }else if(file[i].getName().equals(fileName)){                    return file[i];                    }                }            } else if(temp.getName().equals(fileName)){            return temp;            }        }        return null;            }

读书人网 >编程

热点推荐