跟随一本书的进度,慢慢的来了解怎样用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就没这个不好了。