日期:2014-05-20  浏览次数:20726 次

桌面搜索
老师让写一个桌面搜索工具,我现在正在学java,就想用java写,当练手了。大家有什么建议吗

------解决方案--------------------
Java code
package com.dai;

import java.io.File;
import java.util.ArrayList;

public class ListAll
{
    //用于判断目录或文件所处的层次
    private static int time;
    
    // 递归的方法
    public static void deepList(File file)
    {
        if (file.isFile() || 0 == file.listFiles().length)
        {
            return;
        }
        else
        {
            File[] files = file.listFiles();
            
            files = sort(files);
            
            for(File f : files)
            {
                StringBuffer output = new StringBuffer();
                
                if(f.isFile())
                {
                    output.append(getTabs(time));
                    output.append(f.getName());
                }
                else
                {
                    output.append(getTabs(time));
                    output.append(f.getName());
                    output.append("\\");
                }
                
                System.out.println(output);
                
                if(f.isDirectory())
                {
                    time++;
                    
                    deepList(f);
                    
                    time--;
                }
            }
        }
    }

    // 整理文件数组,使得目录排在文件之前
    private static File[] sort(File[] files)
    {
        ArrayList<File> sorted = new ArrayList<File>();

        // 寻找到所有的目录
        for (File f : files)
        {
            if (f.isDirectory())
            {
                sorted.add(f);
            }
        }
        // 寻找到所有的文件
        for (File f : files)
        {
            if (f.isFile())
            {
                sorted.add(f);
            }
        }

        return sorted.toArray(new File[files.length]);
    }
    
    //判断需要加多少 tab的方法
    private static String getTabs(int time)
    {
        StringBuffer buffer = new StringBuffer();
        
        for(int i = 0; i < time; i++)
        {
            buffer.append("\t");
        }
        
        return buffer.toString();
    }
    
    
    public static void main(String[] args)
    {
        File file = new File("D:\\ZZZ");
        
        deepList(file);
    }
}

------解决方案--------------------
探讨

引用:
用File类。
这个应该复杂在界面吧。

我觉得复杂的地方应该是如何建立和管理索引。老师的要求是可以根据时间,文件名,文本文件还可以根据内容,还要可以适应增量(增加删除修改某个文件,不用再扫描磁盘,直接在索引里就可以反映出来,因此要实时运行一个监视增量的后台的进程,也因此这个进程要占用资源尽可能的小),我就很头疼怎么设计索引的模式