在指定路径或者是文件名查找指定的字符串

本文介绍了一个用于在Java项目中搜索特定字符串的实用工具。该工具能够递归地遍历指定目录及其子目录下的所有文件,并查找包含指定字符串的文件。支持在多种文件类型中进行搜索,特别是针对JSP文件进行了优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用WINDOWS的内容查找,居然只支持文本文件,不支持如JSP等文件。那就自己写一个吧,感觉还可以,将所以包含查找字符串的全路径都打印出来,这样就能够一目了然了。源程序如下:

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
publicclassSearchInJspFile...{

/***//**
*在指定的文件名中查找对应的字符串,存在就将该文件名绝对路径打印出来
*
@paramfileName文件名的绝对路径,String型
*
@paramsrcStr要查找的字符串,String型
*/

publicvoidsearchFile(StringfileName,StringsrcStr)
...{
Filefile
=newFile(fileName);
try...{
FileReaderfr
=newFileReader(file);
BufferedReaderbr
=newBufferedReader(fr);
StringstrLine
="";
while((strLine=br.readLine())!=null)
...{
if(strLine.indexOf(srcStr)>0)
...{
System.out.println(fileName);
break;
}

}

br.close();
fr.close();
}
catch(Exceptione)...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}

/***//**
*在指定的绝对路径中查找指定的字符串
*
@parampath绝对路径
*
@paramsrcStr要查找的字符串
*/

publicvoidsearchPath(Stringpath,StringsrcStr)
...{
Filefile
=newFile(path);
if(file.isDirectory())
...{
File[]fileList
=file.listFiles();
for(inti=0;i<fileList.length;i++)
...{
if(fileList[i].isDirectory())//是目录就调用递归
...{
searchPath(fileList[i].getAbsolutePath(),srcStr);
}

else
...{
searchFile(fileList[i].getAbsolutePath(),srcStr);
}

}

}

else
...{
searchFile(path,srcStr);
}

}

publicstaticvoidmain(String[]args)...{
//TODOAuto-generatedmethodstub
Stringpath="H:\xinkuaijizhunze\src\BIMIS";
StringsrcStr
="<iframename="pubinfo"";
SearchInJspFiles
=newSearchInJspFile();
s.searchPath(path,srcStr);
System.out.println(
"执行完毕!");
}


}

这个改进了一下,可以在一个文件中查找多个字符串,只有当多个字符串都存在于同一个文件中时,查找条件成立,打印查找到的文件名及路径。

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.util.ArrayList;

publicclassSearchStrInPath...{
ArrayListlistCondition
=newArrayList();//存放条件的列表

intconditionNum;//查找的条件个数

StringfileTypeExtendsName
="";//在指定的扩展名文件中查找,例如:.xml,不指定就在全部的文件中查找,包括二进制文件

/***//**
*取得总条件的个数
*
*
@return
*/

privateintgetConditionNum()...{
returnlistCondition.size();
}


/***//**
*增加需要查找的字符串,所有增加的字符串在查找的文件中都找到返加该文件名
*
@paramstr
*/

privatevoidaddCondition(Stringstr)...{
listCondition.add(str);
}


/***//**
*在给定的文件中查找
*
@paramfileName文件名
*/

publicvoidsearchFile(StringfileName)...{
Filefile
=newFile(fileName);

booleanisTrue=false;
try...{
StringstrLine
="";
for(inti=0;i<conditionNum;i++)...{
FileReaderfr
=newFileReader(file);
BufferedReaderbr
=null;
br
=newBufferedReader(fr);
Stringcondition
=listCondition.get(i).toString();
isTrue
=false;
while((strLine=br.readLine())!=null)...{
if(strLine.indexOf(condition)>0)...{
isTrue
=true;
break;
}

}

br.close();
fr.close();
if(!isTrue)...{
i
=conditionNum;//结束
}

}

if(isTrue)...{
System.out.println(fileName);
}

}
catch(Exceptione)...{
//TODOAuto-generatedcatchblock
//e.printStackTrace();
}

}


/***//**
*在指定的绝对路径中查找指定的字符串
*
*
@parampath
*绝对路径
*
@paramsrcStr
*要查找的字符串
*/

publicvoidsearchPath(Stringpath)...{
conditionNum
=getConditionNum();
Filefile
=newFile(path);
if(file.isDirectory())...{
File[]fileList
=file.listFiles();
for(inti=0;i<fileList.length;i++)...{
if(fileList[i].isDirectory())//是目录就调用递归
...{
searchPath(fileList[i].getAbsolutePath());
}
else...{
//下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if(fileTypeExtendsName==""
||fileList[i].getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(fileList[i].getAbsolutePath());
}

}

}
else...{
//下面为设置只读取指定后缀的文件,在这些指定的文件中去查找
if(fileTypeExtendsName==""
||file.getAbsolutePath().endsWith(fileTypeExtendsName))
searchFile(file.getAbsolutePath());

}

}


//一个示例
publicstaticvoidmain(String[]args)...{
//TODOAuto-generatedmethodstub
SearchStrInPaths=newSearchStrInPath();
Stringpath
="D:\work\BIMIS\bfms\web\WEB-INF\config\operation\bfms";
s.addCondition(
"IvtBaseInfoFind");
//s.addCondition("xml");//可增加多个字符串同时查找
//s.addCondition("gb2312");
s.searchPath(path);
System.out.println(
"执行完毕!");
}


}
<think>我们之前讨论的是在文件中查找包含特定字符串的内容,现在用户的需求是查找文件名包含特定字符串的文件。这是两个不同的操作。 在CentOS8中,查找文件名包含特定字符串的文件,通常使用`find`命令或者`locate`命令。 根据引用[1]中提到的`find`命令,我们可以通过`-name`选项来匹配文件名。 引用[2]提到了`grep`,但它是用于文件内容的,不适用于文件名。 因此,解决方案如下: 1. 使用`find`命令: ```bash find /path/to/search -name "*特定字符串*" ``` 说明: - `/path/to/search`:要搜索的目录路径,例如当前目录用`.`表示,整个系统可以用`/`(但需要权限)。 - `-name "*特定字符串*"`:按照文件名匹配,支持通配符。注意:通配符要加引号,防止shell扩展。 2. 使用`locate`命令(更快,但需要先更新数据库): ```bash sudo updatedb # 更新数据库(如果文件是最近创建的,可能需要先执行此命令) locate "*特定字符串*" ``` 注意:`locate`命令会从预建的数据库中查找,所以速度非常快,但可能不是实时的。 3. 使用`ls`和`grep`组合(仅在当前目录): ```bash ls -R /path/to/search | grep "特定字符串" ``` 但是这种方法不够可靠,因为`ls -R`的输出是递归的文件列表,然后通过`grep`筛选出包含字符串的行。但可能会匹配到路径的其他部分,而且对于包含特殊字符的文件名可能不友好。 推荐使用`find`命令,因为它更强大且实时。 示例: 在当前目录及子目录下查找文件名包含"test"的文件: ```bash find . -name "*test*" ``` 如果需要忽略大小写,可以使用`-iname`选项: ```bash find . -iname "*test*" ``` 根据引用[1]中提到的`-mtime`等选项,我们也可以结合时间条件来查找,例如查找最近7天内修改过的文件名包含"test"的文件: ```bash find . -mtime -7 -name "*test*" ``` 另外,如果用户想要查找特定类型的文件(比如只查找文本文件),可以结合`-type`选项,例如: ```bash find . -type f -name "*.txt" -name "*test*" ``` 注意:`find`命令的`-name`选项可以多次使用,但它们是“与”的关系,所以上面的例子会同时满足两个条件(即文件名包含test且以.txt结尾)。如果要满足任一条件,可以使用`-o`(或)操作符,但要注意括号的使用(需要转义): ```bash find . \( -name "*.txt" -o -name "*.sh" \) -name "*test*" ``` 但是,上面的命令会先匹配扩展名为.txt或.sh的文件,然后再在这些文件中匹配包含"test"的文件名。 因此,主要使用`find`命令的`-name`选项即可满足用户需求。 生成相关问题: 1. 如何查找文件名以特定字符串开头的文件? 2. 如何查找文件名以特定字符串结尾的文件? 3. 如何查找特定大小的文件名包含指定字符串的文件? 4. 如何忽略大小写进行文件名查找? 5. 如何查找并处理这些文件(例如删除)? 注意:在回答中,我们不需要写系统级指令,只需要在用户可见层给出清晰回答。</think>在 CentOS 8 中查找**文件名**包含特定字符串的文件,推荐使用 `find` 命令。以下是详细操作指南: --- ### **1. 基础文件名查找** ```bash find /搜索路径 -name "*包含的字符串*" ``` - **参数说明**: - `/搜索路径`:要搜索的目录(如 `/home` 或当前目录 `.`) - `-name`:按文件名匹配 - `*包含的字符串*`:通配符模式(`*` 表示任意字符) - **示例**: ```bash find /var/log -name "*error*" # 查找 /var/log 目录下文件名含 "error" 的文件 ``` --- ### **2. 常用进阶选项** | **场景** | **命令** | **说明** | |------------------------|----------------------------------------------|-----------------------------| | 忽略大小写 | `find . -iname "*TEST*"` | `-iname` 不区分大小写 | | 限定文件类型 | `find . -type f -name "*.conf"` | `-type f` 只查普通文件 | | 排除目录 | `find / -path "/proc" -prune -o -name "*.log"` | 跳过 `/proc` 目录 | | 结合文件修改时间 | `find . -mtime -7 -name "backup*"` | 查找7天内修改的文件[^1] | --- ### **3. 快速查找工具** #### (1) `locate`(需先更新数据库) ```bash sudo updatedb # 更新文件数据库 locate "*string*" # 快速搜索(支持通配符) ``` - 优点:速度极快 - 缺点:数据库非实时更新(新文件需先执行 `updatedb`) #### (2) `fd`(现代替代工具,需安装) ```bash sudo dnf install fd-find # 安装 fd "pattern" /path # 基础用法 fd -e txt "backup" # 查找所有含 "backup" 的 .txt 文件 ``` --- ### **4. 组合命令技巧** - **查找并统计数量**: ```bash find . -name "*tmp*" | wc -l ``` - **查找后执行操作**(如删除): ```bash find /tmp -name "*.temp" -exec rm -f {} \; ``` - **查找并显示详情**: ```bash find ~ -name "document*" -ls ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值