java 查找目录下文件内容包含某个字符串的文件

这个java类主要是用来查找文件内容的,而不是查找文件名的。主要作用是查找目录下所有文件的文件内容包含特定字符串的文件,并打印输出位置和找到的字符数量。可以定义多个字符进行查找,不需要担心文件格式问题,非常方便!

package com.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class SearchStrInPath  
{  
    public static int mount = 0;  
    public static void main(String[] args)   
    {  
        String filename = "e:\\20161215\\wsbsbb";
        //创建一个 File 实例,表示路径名是指定路径参数的文件  
        File file = new File(filename);
        args=new String[]{"PW"};//
        for (int i = 0; i < args.length; i++) {
            findFile(file, args[i]);  
            print(args[i]);  
		}

    }  
    public static boolean isTrueFile(File file)   
    {  
        if(!file.exists() || !file.canRead())  
        return false;  
        if (file.getName().startsWith("."))  
        return false;  
        if (file.getName().endsWith("."))  
        return false;  
        return true;  
    }  
    public static void findFile(File file, String word)   
    {  
        File[] listFiles = file.listFiles();   
        //得到一个File数组,它默认是按文件最后修改日期排序的  
        for (int i = 0; i < listFiles.length; i++)   
        {  
           if (listFiles[i].isDirectory())  
           findFile(listFiles[i], word);  
           else if (isTrueFile(listFiles[i]))  
           search(listFiles[i], word);  
        }  
    }  
    public static void search(File file, String word)   
    {  
        try   
        {  
            int j = 0, k = 0, ch = 0;  
            String str = null;  
            FileReader in = new FileReader(file);  
            while ((ch = in.read()) != -1)   
            {  
                str += (char) ch;  
            }  
            if (str != null)  
            {  
                while (str.indexOf(word, j) != -1)   
                {  
                    k++;  
                    j = str.indexOf(word, j) + 1; // 返回第一次出现的指定子字符串在此字符串中的索引  
                }  
            }  
            if (k > 0)   
            {  
                System.out.println("在" + file.getAbsolutePath() + "有    " + k+ " 个关键字" + word);  
                mount++;  
            }  
            in.close();  
        }   
        catch (FileNotFoundException e)  
        {  
            e.printStackTrace();  
        }   
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
    }  
    public static void print(String word)  
    {  
        if (mount != 0)   
        {  
            System.out.println("一共找到    " + mount + " 个文件包含关键字" + word + "! \n");
            mount=0;
        }   
        else   
        {  
            System.out.println("没有找到相应的文件");  
        }  
    }  
}  


  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的File类和Scanner类来实现在一堆文件查找某个字符串的功能。具体实现步骤如下: 1. 创建一个File对象,表示你要查找文件夹或者文件。 2. 使用listFiles()方法获取该文件夹下的所有文件,如果是文件则直接读取,如果是文件夹则递归调用该方法。 3. 对于每个文件,使用Scanner类读取文件内容,然后使用contains()方法判断文件中是否包含你要查找字符串。 4. 如果包含,则输出文件名或者做出其他处理。 下面是示例代码: ```java import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class FindStringInFiles { public static void main(String[] args) { String folderPath = "folder path"; // 文件夹路径 String targetString = "target string"; // 目标字符串 File folder = new File(folderPath); findStringInFiles(folder, targetString); } private static void findStringInFiles(File folder, String targetString) { if (folder.isDirectory()) { File[] files = folder.listFiles(); for (File file : files) { findStringInFiles(file, targetString); } } else { try { Scanner scanner = new Scanner(folder); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (line.contains(targetString)) { System.out.println(folder.getName() + " contains " + targetString); break; } } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } } ``` 注意:这个代码只会输出第一次匹配到的文件名,如果要查找多个文件,可以将输出改为将文件名存储到一个列表中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值