Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 729|回复: 0

在一个目录中搜索含有匹配字符串的文件 java实例

[复制链接]

该用户从未签到

发表于 2011-9-18 13:44:35 | 显示全部楼层 |阅读模式
从一个指定目录搜索(打开)其中所有文件,找到匹配的字符串,java程序,如下:

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;   
  
/**  
* 考试程序:  
* 写一个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;      
            if (subFile == null     
            ){      
                continue;      
            }      
            if (subFile.isFile()      
            ){      
                fileList.add(subFile);      
                continue;      
            }      
            else if (subFile.isDirectory()      
            ){      
                addSubFileList(subFile, fileList);      
            }      
        }      
    }   
      
}  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 23:37 , Processed in 0.356299 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表