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入门到精通教程
查看: 318|回复: 0

[JavaIO学习]在一个目录中搜索含有匹配字符串的文件

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-4 23:58:36 | 显示全部楼层 |阅读模式
    从一个指定目录搜索(打开)其中所有文件,找到匹配的字符串,java程序,如下:
    1. import java.io.BufferedReader;   
    2. import java.io.File;   
    3. import java.io.FileInputStream;   
    4. import java.io.IOException;   
    5. import java.io.InputStreamReader;   
    6. import java.util.ArrayList;   
    7. import java.util.HashSet;   
    8. import java.util.Iterator;   
    9. import java.util.List;   
    10. import java.util.Set;   
    11. import java.util.TreeSet;   
    12.   
    13. /**  
    14. * 考试程序:
    15.   
    16. * 写一个Java SE程序,要求从一个指定目录搜索其中所有文件,找到匹配的字符串(例如从  
    17. * C:\apache-tomcat-6.0.20-src\搜索所有.java文件,查找指定字符串"useBodyEncodingForURI");  
    18. * @author mamacmm  
    19. *  
    20. */  
    21. public class SearchStr {   
    22.   
    23.     public static void main(String[] args){   
    24.         //要查找的文件夹   
    25.         String path = "C:\apache-tomcat-6.0.20-src";   
    26.         //要查询的字符串   
    27.         String str = "useBodyEncodingForURI";   
    28.         //设置读取文件内容时的文件编码   
    29.         String encoding = "utf8";   
    30.         //某个文件的内容   
    31.         String content = "";   
    32.         //所有文件的地址   
    33.         Set fileNameSet = SearchStr.fileNameSet(path);   
    34.            
    35.         for (Iterator i = new TreeSet(fileNameSet).iterator() ; i.hasNext() ; )      
    36.         {      
    37.             String filePath = i.next().toString();   
    38.             filePath = filePath.replaceAll("\", "\\\");   
    39. //          System.out.println(filePath);   
    40.             if(filePath.length() > 5 && ".java".equals(filePath.substring(filePath.length()-5, filePath.length()))){   
    41.                 try {   
    42.                     content = SearchStr.readTxt(filePath, encoding);   
    43. //                  System.out.println("文件里面的内容:");   
    44. //                  System.out.println(content);   
    45.                     if(content.indexOf(str) != -1){   
    46.                         System.out.println("----------下面这个文件里面含有:"+str+"-----------");   
    47.                         System.out.println(filePath);   
    48.                     }   
    49.                        
    50.                 } catch (IOException e) {   
    51.                     e.printStackTrace();   
    52.                 }   
    53.             }   
    54.         }   
    55.     }   
    56.       
    57.       
    58.       
    59.     /**  
    60.      * 读取文本文件内容  
    61.      *   
    62.      * @param filePathAndName  
    63.      *            带有完整绝对路径的文件名  
    64.      * @param encoding  
    65.      *            文本文件打开的编码方式  
    66.      * @return 返回文本文件的内容  
    67.      */  
    68.     public static String readTxt(String filePathAndName, String encoding)   
    69.             throws IOException {   
    70.         encoding = encoding.trim();   
    71.         StringBuffer str = new StringBuffer("");   
    72.         String st = "";   
    73.         try {   
    74.             FileInputStream fs = new FileInputStream(filePathAndName);   
    75.             InputStreamReader isr;   
    76.             if (encoding.equals("")) {   
    77.                 isr = new InputStreamReader(fs);   
    78.             } else {   
    79.                 isr = new InputStreamReader(fs, encoding);   
    80.             }   
    81.             BufferedReader br = new BufferedReader(isr);   
    82.             try {   
    83.                 String data = "";   
    84.                 while ((data = br.readLine()) != null) {   
    85.                     str.append(data + " ");   
    86.                 }   
    87.             } catch (Exception e) {   
    88.                 str.append(e.toString());   
    89.             }   
    90.             st = str.toString();   
    91.         } catch (IOException es) {   
    92.             st = "";   
    93.         }   
    94.         return st;   
    95.     }   
    96.       
    97.       
    98.     /**  
    99.      * 把一个文件夹及所有子文件夹中包含的文件读取出来  
    100.      * @param path 绝对地址,例如"c:\test"  
    101.      * @return  
    102.      */  
    103.     public static Set fileNameSet(String path)      
    104.     {      
    105.         File directory = new File(path);      
    106.         List fileList = listAllFiles(directory);      
    107.      
    108.         Set fileNameSet = new HashSet(fileList.size());      
    109.         for (int i = 0 ; i< fileList.size() ; i++)      
    110.         {      
    111.             File file = (File)fileList.get(i);      
    112.             fileNameSet.add(file.getAbsolutePath());      
    113.         }      
    114.      
    115.         return fileNameSet;   
    116.      
    117.     }   
    118.       
    119.     /**  
    120.      * fileNameSet 方法的附属方法  
    121.      * @param directory  
    122.      * @return  
    123.      */  
    124.     private static List listAllFiles(File directory)      
    125.     {      
    126.         if (directory == null || !directory.isDirectory()){      
    127.             return null;      
    128.         }      
    129.         List fileList = new ArrayList();      
    130.         addSubFileList(directory, fileList);      
    131.      
    132.         return fileList;      
    133.     }      
    134.      
    135.     /**  
    136.      * fileNameSet 方法的附属方法  
    137.      * @param file  
    138.      * @param fileList  
    139.      */  
    140.     private static void addSubFileList(File file,List fileList){      
    141.         File[] subFileArray = file.listFiles();      
    142.         if (subFileArray == null     
    143.             || subFileArray.length == 0     
    144.         ){      
    145.             return;      
    146.         }      
    147.      
    148.         for (int i = 0 ; i < subFileArray.length ; i++)      
    149.         {      
    150.             File subFile = subFileArray[i];      
    151.             if (subFile == null     
    152.             ){      
    153.                 continue;      
    154.             }      
    155.             if (subFile.isFile()      
    156.             ){      
    157.                 fileList.add(subFile);      
    158.                 continue;      
    159.             }      
    160.             else if (subFile.isDirectory()      
    161.             ){      
    162.                 addSubFileList(subFile, fileList);      
    163.             }      
    164.         }      
    165.     }   
    166.       
    167. }  
    复制代码

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/4/235836531.zip
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-25 13:25 , Processed in 0.296434 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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