跟随一本书的进度,慢慢的来了解怎样用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就没这个不好了。
分享到:
相关推荐
在"CodeIgniter-和-Doctrine-从零开始"的学习过程中,我们可以深入理解这两个框架的核心概念和实践应用。 首先,CodeIgniter的基础部分涵盖了框架的基本结构和配置。你将学习如何安装和设置CodeIgniter环境,理解其...
这些辅助类通常包含了通用功能,例如数据验证、日期时间处理、字符串操作、集合操作等,使得开发者无需从零开始编写这些常见功能。 1. **数据验证**:在软件开发中,数据验证是非常关键的一步,确保输入的数据符合...
### 从零开始学MT4编程 #### 一、MT4平台简介与使用入门 MT4,即MetaTrader 4,是全球范围内广泛使用的外汇交易平台之一。它不仅为用户提供了一个强大的交易工具,还支持自动化的交易策略执行,即所谓的“智能交易...
### 从零开始学CAD:基础知识与核心技能 #### 一、CAD简介 CAD,即Computer Aided Design(计算机辅助设计),是一种利用计算机系统来进行设计工作的技术。它被广泛应用于建筑、机械制造、电子工程等多个领域。CAD...
在《从零学辅助教程.txt》这个文件中,你将找到这些概念的详细解释和实例,包括逐步指导和可能的代码示例,帮助你从零开始掌握内存管理的基本技巧。记得在学习过程中,理论结合实践,多做练习,这样才能真正掌握这些...
01 背景 ChatGPT于去年正式公测后,凭借其强大的自然语言处理能力迅速获得业内广泛关注,特别是辅助软件开发上,初步表现出了令人满意的能力,然而正当业内积极探索... 第一部分,我们模拟一个从零开始的开发场景
描述用的文本框和类型这两个单元格:这部分让用户能够输入或选择内容。通常,我们会在单元格内嵌入文本框(UITextField),以允许用户输入描述,而类型可能通过标签(UILabel)展示,供用户选择或查看。\n\n2. 照片...
本篇将从零开始,深入探讨LoadRunner的入门与提升。 首先,理解性能测试的基本概念是必不可少的。性能测试旨在模拟真实用户对系统的操作,以检查系统在不同负载下的响应时间、吞吐量和资源利用率等关键指标。...
本文将详细阐述如何从零开始自学成为电子工程师,包括电子工程师的职业定义、自学的必要知识内容、以及大致需要的学习时间。 首先,电子工程师是指那些从事电子设备和信息系统研究、教学、产品设计、科技开发、生产...
这些实例代码通常会涵盖基础用法到高级用法,帮助开发者从零开始掌握类库的全部功能。 在实际开发中,跨程序辅助类库的应用场景非常广泛,比如广告推送、社交分享、登录验证等。通过使用这样的类库,开发者可以避免...
- 一般情况下,色环电阻的排列顺序是从左到右或从靠近电阻一端的位置开始。 2. **技巧**: - **技巧1:寻找误差色环**。最常用的表示电阻误差的颜色包括金、银和棕色。其中,金环和银环很少被用作色环的第一环,...
- 在`BigFigure`类中,我们使用`std::string`类型的`num1`和`num2`成员变量来分别存储两个大数,`outcome`存储结果,`precision`表示精度,`operation`表示执行的操作。 2. **加法运算**: - 加法的核心是逐位...
- 创建内部类的实例时,需要先创建外部类的实例。 **3.9. 面向对象设计** - **3.9.1. 面向对象设计的七大原则** - 单一职责原则:一个类只负责一项职责。 - 开闭原则:对扩展开放,对修改关闭。 - 里氏替换...
死锁是指两个或多个进程在执行过程中,由于竞争资源而造成的一种僵局状态。预防死锁的方法通常包括避免循环等待、采用资源有序分配法等。 **7. 进程与线程** 进程是程序运行的基本单位,拥有独立的内存空间;线程...
- 时针在两个数字之间,取较小的数字,若在12和1之间,算12时。 3. 记录时间方式: - 文字法,如5时50分。 - 电子表法,如8时零5分写作8:05。 4. 计算时间差: - 结束时间减去开始时间,分钟不够减时借位处理...
每个Java应用程序都从`main`方法开始执行。`public static void main(String[] args)`是程序的入口点,这里会包含接收用户输入、处理计算逻辑以及输出结果的代码。 3. **输入输出(Input/Output)**: 在计算器...
通过这个库,开发者可以更方便地构建和维护Modbus通信代码,无需从零开始编写所有底层细节。 2. **Serotonin-timer-2.0.6.jar**:这个模块专注于定时任务和调度,对于需要定期或间隔性执行Modbus读取或写入操作的...
在这一阶段的学习中,读者可以期待了解到如何从零开始搭建一个基本的 Zend 项目,包括设置环境、创建控制器、视图以及模型等基础知识。 **描述解析:** 描述中提到的 "博文链接:...