搜索在特定时间内完成

时间:2014-01-21 04:34:55

标签: java multithreading file

我有一个代码来搜索特定位置的文件。我想添加时间限制来停止搜索。如果我说在5000毫秒内搜索,那么搜索必须在5000毫秒后停止并显示结果。 任何人都可以建议最好的方法吗?

public class FileSearch {

    final private int FOLDER=1,FILE=2,BOTH=3;
    private Pattern pat;
    private int filter;
    private List<String> searchList = new ArrayList<String>();
    public void setFilter(int filter) {
        this.filter = filter;
    }

    public void setPat(Pattern pat) {
        this.pat = pat;
    }

    private void findFileNames(File file){
        File[] list = file.listFiles();
        if (list != null)
        for (File fil : list) {
            if (fil.isDirectory()) {
                findFileNames(fil);
            } else {
                matchName(fil.getName());
            }
        }
    }
    private void findFolderNames(File file){
        File[] list = file.listFiles();
        if (list != null)
        for (File fil : list) {
            if (fil.isDirectory()) {
                matchName(fil.getName());
                findFolderNames( fil);
            }
        }
    }
    public void findFile(File file) {

        switch(this.filter){
        case FOLDER:
            findFolderNames(file);
            break;
        case FILE:
            findFileNames(file);
            break;
        case BOTH:

            File[] list = file.listFiles();
            if (list != null)
            for (File fil : list) {
                if (fil.isDirectory()) {
                    findFolderNames(fil);
                } else {
                    matchName(fil.getName());
                }
            }

            findFileNames(file);
            findFolderNames(file);
            break;
        default:
            break;

        }

    }

    public void startFileSearch() {
        FileSearch ff = new FileSearch();
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the file name to be searched (Can use regular expressions).. ");
        String name = scan.next();
        System.out.println("Enter the directory where to search ");
        String directory = scan.next();
        System.out.println("Enter filter (1.FOLDER/2..FILE/3.BOTH) to search ");
        int filter = scan.nextInt();
        ff.setPat(Pattern.compile(name));
        ff.setFilter(filter);
        ff.findFile(new File(directory));
    }

    private void matchName(String fileName){
        if (this.pat.matcher(fileName).find()) {
            System.out.println(fileName);
            this.searchList.add(fileName);
        }

    }
}

2 个答案:

答案 0 :(得分:1)

我建议使用Quartz API。但您也可以使用javas Timer和TimerTask API。您可以使用以下参考文献:Timer&amp; Timertask

答案 1 :(得分:1)

您应该使用多个帖子。

主线程使用实现Runnable的类实例启动搜索线程,并具有布尔标志“已停止”,等待5000ms,然后在搜索三个实例上将标志“已停止”设置为true。搜索线程检查循环中的标志“已停止”,当它为真时,它们完成run()方法。不要打断线程。 Plse参见Thread api和描述它如何制作一个质量。如果您需要更多提示,请告诉我。 THX