`
mamacmm
  • 浏览: 200018 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

从一个指定目录搜索其中所有文件,找到匹配的字符串

阅读更多

从一个指定目录搜索其中所有文件,找到匹配的字符串

 

为了以上的目的,我写了一个java程序,如下:

package com.exam3;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * 考试程序:<br>
 * 写一个Java SE程序,要求从一个指定目录搜索其中所有文件,找到匹配的字符串(例如从
 * C:\\apache-tomcat-6.0.20-src\\搜索所有.java文件,查找指定字符串"useBodyEncodingForURI");
 * @author mamacmm
 *
 */
public class SearchStr {

	public static void main(String[] args){
		//要查找的文件夹
		String path = "C:\\apache-tomcat-6.0.20-src\\"; 
		//要查询的字符串
		String str = "useBodyEncodingForURI";
		//设置读取文件内容时的文件编码
		String encoding = "utf8";
		//某个文件的内容
		String content = "";
		//所有文件的地址
		Set fileNameSet = SearchStr.fileNameSet(path);
		
		for (Iterator i = new TreeSet(fileNameSet).iterator() ; i.hasNext() ; )   
        {   
			String filePath = i.next().toString();
			filePath = filePath.replaceAll("\\\\", "\\\\\\\\");
//			System.out.println(filePath);
			if(filePath.length() > 5 && ".java".equals(filePath.substring(filePath.length()-5, filePath.length()))){
				try {
					content = SearchStr.readTxt(filePath, encoding);
//					System.out.println("文件里面的内容:");
//					System.out.println(content);
					if(content.indexOf(str) != -1){
						System.out.println("----------下面这个文件里面含有:"+str+"-----------");
						System.out.println(filePath);
					}
					
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
        }
	}
	
	
	
	/**
	 * 读取文本文件内容
	 * 
	 * @param filePathAndName
	 *            带有完整绝对路径的文件名
	 * @param encoding
	 *            文本文件打开的编码方式
	 * @return 返回文本文件的内容
	 */
	public static String readTxt(String filePathAndName, String encoding)
			throws IOException {
		encoding = encoding.trim();
		StringBuffer str = new StringBuffer("");
		String st = "";
		try {
			FileInputStream fs = new FileInputStream(filePathAndName);
			InputStreamReader isr;
			if (encoding.equals("")) {
				isr = new InputStreamReader(fs);
			} else {
				isr = new InputStreamReader(fs, encoding);
			}
			BufferedReader br = new BufferedReader(isr);
			try {
				String data = "";
				while ((data = br.readLine()) != null) {
					str.append(data + " ");
				}
			} catch (Exception e) {
				str.append(e.toString());
			}
			st = str.toString();
		} catch (IOException es) {
			st = "";
		}
		return st;
	}
	
	
	/**
	 * 把一个文件夹及所有子文件夹中包含的文件读取出来
	 * @param path 绝对地址,例如"c:\\test\\"
	 * @return
	 */
	public static Set fileNameSet(String path)   
    {   
        File directory = new File(path);   
        List fileList = listAllFiles(directory);   
  
        Set fileNameSet = new HashSet(fileList.size());   
        for (int i = 0 ; i< fileList.size() ; i++)   
        {   
            File file = (File)fileList.get(i);   
            fileNameSet.add(file.getAbsolutePath());   
        }   
  
        return fileNameSet;
  
    }
	
	/**
	 * fileNameSet 方法的附属方法
	 * @param directory
	 * @return
	 */
	private static List listAllFiles(File directory)   
    {   
        if (directory == null || !directory.isDirectory()){   
            return null;   
        }   
        List fileList = new ArrayList();   
        addSubFileList(directory, fileList);   
  
        return fileList;   
    }   
  
	/**
	 * fileNameSet 方法的附属方法
	 * @param file
	 * @param fileList
	 */
    private static void addSubFileList(File file,List fileList){   
        File[] subFileArray = file.listFiles();   
        if (subFileArray == null  
            || subFileArray.length == 0  
        ){   
            return;   
        }   
  
        for (int i = 0 ; i < subFileArray.length ; i++)   
        {   
            File subFile = subFileArray[i];   
            if (subFile == null  
            ){   
                continue;   
            }   
            if (subFile.isFile()   
            ){   
                fileList.add(subFile);   
                continue;   
            }   
            else if (subFile.isDirectory()   
            ){   
                addSubFileList(subFile, fileList);   
            }   
        }   
    } 
    
}

 

分享到:
评论

相关推荐

    匹配目录下所有字符串

    标题“匹配目录下所有字符串”和描述“搜索出目录下所有与字符串相匹配的.java .c .h文件”指出,我们需要关注的是如何在指定目录及其子目录下的特定文件类型中查找含有特定字符串的文件。这里涉及的主要知识点包括...

    文件夹搜索指定字符串软件

    标题中的“文件夹搜索指定字符串软件”是一款专用于在...总的来说,这款“文件夹搜索指定字符串软件”结合了Java编程、文件I/O、字符串处理、多线程、跨平台技术等多个IT领域的知识,是一个实用且技术含量较高的工具。

    FindStr_搜索包含字符串的文件;_搜索文件_搜索字符串_

    `FindStr`命令是Windows操作系统中的一个强大工具,用于在文件中搜索指定的字符串。这个工具在处理大量文本数据时尤其有用,能帮助我们快速定位到含有特定字符串的文件,从而提高工作效率。 `FindStr`的基本语法...

    matlab开发-查找指定匹配字符串罗马集

    本项目专注于查找指定匹配字符串的罗马集,这涉及到字符串操作、算法设计以及可能的优化技术。具体来说,这个任务是计算一个关键字字符串与一组字符串之间的最短距离,以便找到最近的匹配项。下面我们将深入探讨这一...

    在目录中搜索指定字符串

    字符串搜索则是定位文本中特定字符序列的过程。这个任务在日志分析、代码审查、文本挖掘等场景中非常常见。Java作为一种强大的多平台编程语言,提供了丰富的API和工具来处理这类问题。 Java中主要涉及两个核心类:`...

    在二进制文件中搜索字符串、十六进制甚至另一个二进制文件_Python

    总之,Python提供了一系列的工具和方法,使我们能够方便地在二进制文件中搜索字符串、十六进制值以及另一个二进制文件。通过熟练掌握这些技术,你可以有效地处理各种二进制数据操作,这对于数据分析、逆向工程和软件...

    搜索一个文本文件字符串

    例如,`grep`命令在Linux/Unix系统中是一个强大的文本搜索工具,它支持正则表达式匹配,并能快速地在多个文件中查找字符串。而在编程环境中,Python的`re`模块提供了正则表达式的功能,使得搜索更为灵活和强大。 ...

    多个文件中查找字符串

    1. 定义搜索条件:确定要查找的字符串,可能还需要指定文件类型(如只搜索.txt或.java文件)和搜索范围(特定目录及其子目录)。 2. 执行查找:使用相应的工具执行查找操作,通常会显示包含匹配字符串的文件列表和...

    [字符串]字符串提取(获取两个字符串中间的字符串)

    在C#中,处理字符串时,我们经常需要从一个较大的字符串中提取出特定部分,比如位于两个已知字符串之间的子串。这在解析日志、处理配置文件或者从HTML源码中提取信息时非常常见。标题中的“字符串提取(获取两个字符...

    一个php截取指定字符串之间的字符串的类

    它的功能是在目标字符串中找到第一个边界字符串出现的位置,然后截取从那里到第二个边界字符串之前的所有内容。 2. `multiGetBetween()`:此方法可能用于在字符串中查找多个匹配的子串。它可能接受一个边界数组,...

    从文本文件中查找字符串

    本主题聚焦于“从文本文件中查找字符串”,这是一个常见的需求,例如在源代码中寻找特定函数或变量,或者在日志文件中查找关键信息。这个过程可以帮助开发者定位问题,理解代码逻辑,或者对数据进行分析。 首先,...

    c#正则表达式截取指定字符串之间的字符串。类文件直接用就可以了~

    给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...

    文件字符串一键替换工具

    2. 字符串搜索与替换:用户输入要查找和替换的字符串,工具会在所有文件中进行匹配并替换。 3. 预览与确认:在实际替换前,工具可能会提供预览功能,让用户查看即将被替换的文本,确保无误后再执行操作。 4. 错误...

    多文件中字符串查找工具

    "多文件中字符串查找工具"就是这样的一个实用程序,它能够帮助用户快速、高效地在大量的文本文件中搜索特定的字符串。这个工具的使用极大地提高了工作效率,避免了手动逐个文件检查的繁琐过程。 首先,我们要理解的...

    关键词搜索(字符串匹配)

    字符串匹配,又称为模式匹配,是查找一个字符串(模式)在另一个字符串(目标字符串)中出现的技术。常见的字符串匹配算法有朴素匹配、KMP算法、Boyer-Moore算法和Rabin-Karp算法等。这些算法的主要目标是在尽可能短...

    用c++实现在一个txt文件中查找字符

    用c++实现在一个txt文件中查找字符,算法就是字符串匹配,没什么技巧性,最后还给出了运行时间,适合初学者参考

    检测文件中是否包含指定字符串(1KB)...

    在VB(Visual Basic)编程中,检测文件中是否包含指定字符串是一项常见的任务,尤其是在文本处理、数据检索或者日志分析等场景中。本教程将详细讲解如何使用VB来实现这一功能,同时也会涉及到字符串处理的一些核心...

    文件夹里面搜索文件内容特定字符串的软件

    标题 "文件夹里面搜索文件内容特定字符串的软件" 指涉的是一个能帮助用户在大量文件中查找特定文本内容的工具。在这个场景下,我们关注的焦点是"Notepad++ 7.5.1",这是一个强大的免费源代码编辑器,尤其适用于...

    逐个替换字符串中的指定字符

    - **算法优化**:研究不同的字符串搜索算法,如KMP算法等,可以提高字符串处理的效率。 综上所述,通过理解字符串的基本概念、掌握逐个替换字符串中指定字符的具体实现方法以及注意相关的细节问题,我们可以有效地...

    任意文件中查找字符串程序_

    在DOS环境下,用户经常需要查找指定文件中是否包含特定的字符串,或者统计字符串在文件中的出现次数。为此,DOS提供了一个内置命令`find`来满足这一需求。 #### 二、DOS find 命令详解 1. **基本用法**: - `find ...

Global site tag (gtag.js) - Google Analytics