类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:










页面导航:
正文内容:[原创]基于apache lucene的mp3搜索器
前些日子找机器上的一首老歌时,费了些周折,后想到既然这些mp3有自己的标签信息,为何不利用起来呢?笔者就尝试用lucene实现,分两部分,mp3indexer.java是创建索引的,mp3search.jsp是搜索mp3的页面。
下面是mp3indexer.java的代码。
package mp3indexer;
import java.io.*;
import java.text.*;
import java.util.*;
import org.apache.lucene.analysis.cjk.*;
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
public class mp3indexer
{
public final static string mp3path="d:\\mp3";//mp3所在目录
public final static string indexpath="c:\\mp3indexer";//索引存放目录
public static void main(string[] args) throws classnotfoundexception, ioexception{
try {
indexwriter writer = new indexwriter(indexpath, new cjkanalyzer(), true);
indexmp3s(writer, new file(mp3path));
system.out.println("优化中....");
writer.optimize();
writer.close();
} catch (exception e) {
system.out.println(e.getmessage());
}
}
public static void indexmp3s(indexwriter writer, file file) throws exception {
if (file.isdirectory()) {
string[] files = file.list();
for (int i = 0; i < files.length; i++) {
indexmp3s(writer, new file(file, files[i]));
}
}
else if (file.getpath().endswith(".mp3")) { //只对 mp3 文件做索引
system.out.print("正在处理文件:" + file + " ....");
// add mp3 file ....
document doc = new document();
doc.add(field.text("name", file.getname())); //索引文件名
doc.add(field.unindexed("modified", dateformat.getdatetimeinstance().format(new date(file.lastmodified())))); //索引最后修改时间
doc.add(field.text("size",""+numberformat.getnumberinstance().format(file.length()/1048576.0)+"mb")); //索引最后修改时间
filereader freader = new filereader(file);
java.io.randomaccessfile r=new randomaccessfile(file,"r");
r.seek(file.length()-128);
byte[] bt=new byte[127];
r.read(bt);
string labelinfo=new string(bt,"gb2312");
system.out.println(labelinfo);
if (labelinfo.startswith("tag")) {
doc.add(field.text("comment", labelinfo));
}
system.out.println("[处理完成]");
r.close();
freader.close();
writer.adddocument(doc);
} //end else if
}
} //end class