给定一个文件夹路径,例如"E:\360Downloads",和一段想要查找的字符串内容,例如"@property@",找出该文件夹中所有含有指定字符串内容的指定格式(".java")的文件。
package 对象流;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
File f = new File("E:\\360Downloads");
search(f,"@property@");
}
public static void search(File file,String content) {
if(file.isFile()) {
if(file.getName().toLowerCase().endsWith(".java")) {//指定文件格式
String FileContent = readFileConent(file);
if(FileContent.contains(content)) {
System.out.printf("找到目标字符串%s,在文件:%s%n",content,file);
}
}
}
if(file.isDirectory()) {
File[] fs = file.listFiles();
for(File f:fs) {
search(f,content);//递归
}
}
}
public static String readFileConent(File file) {
try(FileReader fr = new FileReader(file);){
char[] c = new char[(int) file.length()];
fr.read(c);
System.out.println(c.toString());//测试输出确实是地址
// return c.toString();
return new String(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
需要注意的就是return 后面不能接c.toString(),此时输出是地址,而不是文件内容。
原因:c是char[]类型,是引用数据类型,objcet类,调用的toString方法也是objcet类中的方法,返回值确实是地址,就解释了不管println还是return都是地址。