`
fortianwei
  • 浏览: 59775 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多

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

分享到:
评论

相关推荐

    浅评ChatGPT在软件开发上的辅助能力(附GPT-4对比)

    01 背景  ChatGPT于去年正式公测后,凭借其强大的自然语言处理能力迅速获得业内广泛关注,特别是辅助软件开发上,初步表现出了令人满意的能力,然而正当业内积极探索... 第一部分,我们模拟一个从零开始的开发场景

    漏洞推断-利用机器学习辅助发现漏洞

    严格识别程序中代码的漏洞是实现和运行系统安全的...在与FFmpeg库一起进行的一个案例研究中,我们能够将对关注代码的搜索范围从6,778缩小到20个函数,并发现两个安全缺陷,一个是已知的缺陷,另一个构成“零日漏洞”

    C++MFC教程

    例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。 5、示例:下面有一段伪代码演示如何在窗口过程中处理消息 LONG yourWndProc(HWND hWnd,UINT ...

    smallsteps:从零开始的Pro Bono项目

    小步骤从零开始的Pro Bono项目发展原则我们将每个目标,对象称为迭代。 每个迭代将按照此处定义的规则和方法执行。 预期每次迭代都会改进规则和方法。 过去的迭代将不会重新适应那些更好的规则和方法。 如果需要重新...

    Java开发技术大全(500个源代码).

    outputMax.java 求两个数中的最大数 overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java ...

    Android SDK开发包国内官网下载地址.pdf

    唯一的缺点是体积比较大,如果你是从零开始配Android开发环境就下载吧。(可惜官方提供的windows版是64位的eclipse,暂时没有32位版本,等有时间了我自己压一个。 Update2012/12/3: 官网已放出了32位版本) 文件名 ...

    计算机辅助设计的应用与发展.docx

    计算机辅助设计及计算机辅助制造是计算机技术在机械加工领域 中的主要两个方而。它的出现使人们在产品的设计和产品生产中大 大节省了时间,提高了效率,使产品的设计和制造实现了自动化,人们 通过整个系统(CAD/CAM...

    jsr80 java 访问 usb

    这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。 在本文中,将对 jUSB 和 JSR...

    uboott移植实验手册及技术文档

    nand_init()函数在两个文件中实现。其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c...

    java开源包1

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

    java开源包10

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

    计算机二级公共基础知识

    在某些应用中,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。这样的表称为双向链表。 在线性链表中,各数据元素结点的存储空间可以是不连续的...

    ET2012新版.rar

    1、服装打版要具备一定的工艺基础,说得通俗一点就是你的版型不管画到哪一个部位,该部位你一定要清楚它的工艺,不然很多时候就会出现打出来的版型不符合车不起来,或者效果...但不太可能让你从零开始学电脑CAD。

    excel的使用

    实际输入的时候,通常应用等差数列输入法,先输入前二个值,定出自变量中数与数之间的步长,然后选中A2和A3两个单元格,使这二项变成一个带黑色边框的矩形,再用鼠标指向这黑色矩形的右下角的小方块“■”,当光标...

    数据结构题

    30.设按照从上到下、从左到右的顺序从1开始对完全二叉树进行顺序编号,则编号为i结点的左孩子结点的编号为( )。 (A) 2i+1 (B) 2i (C) i/2 (D) 2i-1 31.设一组初始记录关键字序列为(13,18,24,35,47,50,62...

    51单片机C语言编程基础及实例

    两个 16 位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对 AT89C52 单片机,头文件 AT89x52.h 给出了 SFR 特殊功能寄存器所有端口的...

    java开源包11

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

    java开源包2

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

    java开源包3

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

    java开源包6

    BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...

Global site tag (gtag.js) - Google Analytics