查找文件内容 【技术不限-使用io流即可】
定义一个方法规定入参为文件目录以及查找的字符串
search(String path,String str)
效果:在d:\xxx\xxx.txt中找到了xxx字符串
package java_20220221.work.work_2;
import java.io.*;
/**
* @ClassName work_2
* @Description 查找文件内容【技术不限-使用io流即可】
* @Author chenxys
* @Date 2022/2/21 17:48
* @Version
*/
public class work_2 {
//查找文件内容【技术不限-使用io流即可】
//定义一个方法规定入参为文件目录以及查找的字符串
//search(String path,String str)
//效果:在d:\xxx\xxx.txt中找到了xxx字符串
public static void main(String[] args) throws IOException {
searchFile("/Users/chenys/Desktop/itcast","forgive");//使用indexOf
search("/Users/chenys/Desktop/itcast","forgive");//使用charAt
}
public static void search(String path,String str) throws IOException {
//传入参数为文件目录
//新建一个文件对象
File file = new File(path);
File[] files = file.listFiles();
for (File f:
files) {//对文件集合进行遍历
if (f.isFile()){//如果是文件
//读取文件内容并判断是否存在指定字符串
BufferedReader reader = new BufferedReader(new FileReader(f));
String input = "";//读取字符串
while ((input= reader.readLine())!=null){//当不为空时继续读取
//如果存在就返回
String a;//存放较长的字符串
String b;//存放短的字符串
if (input.length() > str.length()){//对字符串进行判断并赋值
a = input;
b = str;
}else {
a = str;
b = input;
}
int count = 0;//定义匹配字符的个数
for (int bi = 0; bi < b.length();bi++) {//对短的字符串进行遍历
String[] bArr = b.split("");//将短的字符串进行分割,逐个比对
if (a.indexOf(bArr[bi])!=-1){//如果存在这个字符
count++;//匹配字符的个数就加一
}else {
break;
}
}
if (b.length() == count){//如果短的字符串的长度等于匹配到的字符长度,则证明长的字符串中存在该字符串
System.out.println("在"+path+"/"+f.getName()+"里找到了"+str+"字符串");//打印输出
break;//退出循环
}
}
reader.close();
}
if (f.isDirectory()) {//如果是文件夹,就遍历
search(path+"/"+f.getName(),str);
}
}
}
public static void searchFile(String path,String str) throws IOException {
//传入参数为文件目录
//新建一个文件对象
File file = new File(path);
File[] files = file.listFiles();
for (File f:
files) {//对文件集合进行遍历
if (f.isFile()){//如果是文件
//读取文件内容并判断是否存在指定字符串
BufferedReader reader = new BufferedReader(new FileReader(f));
String input = "";//读取字符串
while ((input= reader.readLine())!=null){//当不为空时继续读取
//如果存在就返回
String more;//存放较长的字符串
String less;//存放短的字符串
if (input.length() > str.length()){//对字符串进行判断并赋值
more = input;
less = str;
}else {
more = str;
less = input;
}
int count = 0;//定义匹配字符的个数
for (int i = 0; i < less.length(); i++) {//外循环为字符少的字符串
for (int j = 0; j < more.length(); j++) {//字符长的字符串
if(more.charAt(j) == less.charAt(i)){//如果短字符串的字符存在于长字符串
count++;
break;//匹配个数+1,并退出当前循环
}
}
}
if (less.length() == count){//如果短的字符串的长度等于匹配到的字符长度,则证明长的字符串中存在该字符串
System.out.println("在"+path+"/"+f.getName()+"里找到了"+str+"字符串");//打印输出
break;//退出循环
}
}
//关闭资源
reader.close();
}
if (f.isDirectory()) {//如果是文件夹,就遍历
search(path+"/"+f.getName(),str);
}
}
}
}
在/Users/chenys/Desktop/itcast/test/data.txt里找到了forgive字符串
在/Users/chenys/Desktop/itcast/test/data.txt里找到了forgive字符串