从零开始--先写两个辅助类

跟随一本书的进度,慢慢的来了解怎样用lucene构建搜索引擎。
           用Lucene经常要一些辅助类来简化开发,比如获得指定路径的文件的内容,获得指定目录下的所有文件(嵌套的),先就写这两个类来热热身吧。
第一个 FileText.java

package tool;
import java.io.*;
public class FileText {
    public static String getText(File f){
        StringBuffer sb=new StringBuffer("");
        try{
            FileReader fr=new FileReader(f);
            BufferedReader br=new BufferedReader(fr);
            String s=br.readLine();
            while(s!=null)
            {
                sb.append(s);
                s=br.readLine();
            }
            br.close();
        }
        catch(IOException e){
            sb.append("");
            e.printStackTrace();
        }
        return sb.toString();
    }
    public static String getText(String s){
        String t="";
        try{
            File f=new File(s);
            t=getText(f);
        }
        catch(Exception e){
            t="";
        }
        return t;
    }
    //////////////// main函数
    public static void main(String a[]){
        String s=FileText.getText("./src/tool/aa.txt");//这里还出现过问题,查找文件默认是“工程”主目录,而不是该java文件所在的地方。。。
        System.out.println(s);
    }
}
 


其实就是重写函数getText,先将路径转化为文件,再来输出文件内容。

第二个,FileList.java

package tool;
import java.io.*;
public class FileList {
    private static final String SEP="##";//将StringBuffer中每个文件路径用之隔开,好用split函数拆分。
    private static StringBuffer sb=new StringBuffer("");
    public static String[] getFiles(File f)throws IOException
    {
        if(f.isDirectory()){
            File[] fs=f.listFiles();
            for(int i=0;i<fs.length;i++){
                getFiles(fs[i]);
            }
        }
        else
        {
            sb.append(f.getPath()+SEP);
           
        }
        String s=sb.toString();
        String[] list=s.split(SEP);
        return list;
    }
     
   
    public static String[] getFiles(String t)throws IOException
    {
        File f=new File(t);
        if(f.isDirectory()){
            File[] fs=f.listFiles();
            for(int i=0;i<fs.length;i++){
                getFiles(fs[i]);
            }
        }
        else
        {
            sb.append(f.getPath()+SEP);
        }
        String s=sb.toString();
        String[] list=s.split(SEP);
        return list;
    }
   
    public static void main(String[] ds)throws IOException
    {
        String s[]=FileList.getFiles("D:/Mule/examples");
        for(int i=0;i<s.length;i++){
            System.out.println(s[i]);
        }
    }
}
 


上 面两个例子都很基础很简单,但是有一点就是为何要用StringBuffer?有些新手可能更喜欢用String类型相加。原因是SringBuffer 的Buffer这个词,表示缓存中的东西,不用每次写入内存,而String是不变型类型,一旦用到就要在内存中再挖一片区域给他,这样如果多次用到的话 会导致程序执行慢下来,而用StringBuffer就没这个不好了。

你可能感兴趣的:(搜索引擎,F#,Lucene)