[12]从零开始的JAVAEE-文件操作的一些案例

一、全文检索功能

在我们的电脑中有很多的目录,每个目录中又存在许多文件,每个文件里又有许多的内容,现在假定某些文件中包含hello_world这个关键词。我们写一个程序,找出哪些文件中包含这些关键词

实现方法

  • 1.递归遍历目录
  • 2.每次找到一个文件都打开,读取文件中内容
  • 3.判定所查询的词是否存在于这些文件中。

注意:这种实现方式并不高效,只是简单粗暴的实现方式

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;

public class iodemo6 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        //1.先让用户指定一个要进行搜索的根目录
        System.out.println("请输入要扫描的根目录");
        File rootDir = new File(scanner.next());
        if(!rootDir.isDirectory()){
            //输入的目录不存在,返回
            System.out.println("你输入的目录不存在!");
            return;
        }


        //2.让用户输入一个要查询的词
        System.out.println("请输入要查询的词");
        String word = scanner.next();

        //3.递归遍历目录
        scanDir(rootDir,word);
    }


    //递归实现遍历目录的逻辑
    public static void scanDir(File rootDir,String word) throws IOException {
        File[] files = rootDir.listFiles();//将rootDir目录里的内容都列出来放到Files文件夹里
        if(files == null){
            //说明这个目录里没有东西 返回上一级
            return;
        }
        for (File f: files) {
            //遍历这些目录里的东西
            //三个判断
            /**
             * 是不是目录,如果是目录,递归
             * 是不是文件,如果是文件,打开
             * 如果不是文件也不是目录,跳过,在Linux中有很多不是目录也不是文件的东西
             */
            if(f.isDirectory()){
                //是文件 打开 读出了一串字符
                String content = fileread(f);
                if(content.contains(word)){
                    //如果包含
                    System.out.println("包含");
                }
            } else if (f.isFile()) {
                //是目录
                scanDir(f,word);//递归
            }else {
                //不是目录也不是文件,跳过
                continue;
            }
        }
    }



    public static String fileread(File f) throws IOException {
        //一般都是字符流文件 所以使用Reader
        StringBuilder stringBuilder = new StringBuilder();//使用StringBuilder来拼接文件
        try(Reader reader = new FileReader(f)) {
            while (true){
                int a = reader.read();
                if(a == -1){
                    break;
                }
                //走到这里说明没有走到末尾,将其添加到stringBuilder
                stringBuilder.append((char)a);//由于读出来的是int,在拼接时需要强转为char
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不卷啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值