查找文件内容 【技术不限-使用io流即可】

查找文件内容 【技术不限-使用io流即可】

定义一个方法规定入参为文件目录以及查找的字符串

search(String path,String str)

效果:在d:\xxx\xxx.txt中找到了xxx字符串

package java_20220221.work.work_2;
import java.io.*;
/**
 * @ClassName work_2
 * @Description 查找文件内容【技术不限-使用io流即可】
 * @Author chenxys
 * @Date 2022/2/21 17:48
 * @Version
 */
public class work_2 {
    //查找文件内容【技术不限-使用io流即可】
    //定义一个方法规定入参为文件目录以及查找的字符串
    //search(String path,String str)
    //效果:在d:\xxx\xxx.txt中找到了xxx字符串
    public static void main(String[] args) throws IOException {
        searchFile("/Users/chenys/Desktop/itcast","forgive");//使用indexOf
        search("/Users/chenys/Desktop/itcast","forgive");//使用charAt
    }

    public static void search(String path,String str) throws IOException {
        //传入参数为文件目录
        //新建一个文件对象
        File file = new File(path);
        File[] files = file.listFiles();
        for (File f:
             files) {//对文件集合进行遍历
            if (f.isFile()){//如果是文件
                //读取文件内容并判断是否存在指定字符串
                BufferedReader reader = new BufferedReader(new FileReader(f));
                String input = "";//读取字符串
                while ((input= reader.readLine())!=null){//当不为空时继续读取
                    //如果存在就返回
                    String a;//存放较长的字符串
                    String b;//存放短的字符串
                    if (input.length() > str.length()){//对字符串进行判断并赋值
                        a = input;
                        b = str;
                    }else {
                        a = str;
                        b = input;
                    }
                    int count = 0;//定义匹配字符的个数
                    for (int bi = 0; bi < b.length();bi++) {//对短的字符串进行遍历
                        String[] bArr = b.split("");//将短的字符串进行分割,逐个比对
                        if (a.indexOf(bArr[bi])!=-1){//如果存在这个字符
                            count++;//匹配字符的个数就加一
                        }else {
                            break;
                        }
                    }
                    if (b.length() == count){//如果短的字符串的长度等于匹配到的字符长度,则证明长的字符串中存在该字符串
                        System.out.println("在"+path+"/"+f.getName()+"里找到了"+str+"字符串");//打印输出
                        break;//退出循环
                    }
                }
                reader.close();
            }
            if (f.isDirectory()) {//如果是文件夹,就遍历
                search(path+"/"+f.getName(),str);
            }
        }

    }

    public static void searchFile(String path,String str) throws IOException {
        //传入参数为文件目录
        //新建一个文件对象
        File file = new File(path);
        File[] files = file.listFiles();
        for (File f:
                files) {//对文件集合进行遍历
            if (f.isFile()){//如果是文件
                //读取文件内容并判断是否存在指定字符串
                BufferedReader reader = new BufferedReader(new FileReader(f));
                String input = "";//读取字符串
                while ((input= reader.readLine())!=null){//当不为空时继续读取
                    //如果存在就返回
                    String more;//存放较长的字符串
                    String less;//存放短的字符串
                    if (input.length() > str.length()){//对字符串进行判断并赋值
                        more = input;
                        less = str;
                    }else {
                        more = str;
                        less = input;
                    }
                    int count = 0;//定义匹配字符的个数
                    for (int i = 0; i < less.length(); i++) {//外循环为字符少的字符串
                        for (int j = 0; j < more.length(); j++) {//字符长的字符串
                            if(more.charAt(j) == less.charAt(i)){//如果短字符串的字符存在于长字符串
                                count++;
                                break;//匹配个数+1,并退出当前循环
                            }
                        }
                    }
                    if (less.length() == count){//如果短的字符串的长度等于匹配到的字符长度,则证明长的字符串中存在该字符串
                        System.out.println("在"+path+"/"+f.getName()+"里找到了"+str+"字符串");//打印输出
                        break;//退出循环
                    }
                }
                //关闭资源
                reader.close();
            }
            if (f.isDirectory()) {//如果是文件夹,就遍历
                search(path+"/"+f.getName(),str);
            }
        }

    }

}
在/Users/chenys/Desktop/itcast/test/data.txt里找到了forgive字符串
在/Users/chenys/Desktop/itcast/test/data.txt里找到了forgive字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值