1.根据关键字,进行文件内容的搜索,并返回包含关键字的第一行内容以及行号。文件内容建议是utf-8格式,避免中文乱码问题。
public static JSONObject isContainContent(File pathname,String keyWord){
JSONObject jsonObject = new JSONObject();
boolean result = false;
//行读取
LineNumberReader lineReader = null;
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(pathname), "UTF-8");
lineReader = new LineNumberReader(read);
String readLine = null;
while((readLine =lineReader.readLine()) != null){
//判断是否包含
if(readLine.contains(keyWord)) {
result = true;
jsonObject.put("lineWords", delString);
jsonObject.put("lineNumber", lineReader.getLineNumber());
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
if(lineReader != null){
try {
lineReader.close();
} catch (IOException e) {
e.printStackTrace();
lineReader = null;
}
}
}
jsonObject.put("flag", result);
return jsonObject;
}
2.根据关键字,进行文件名搜索。
/**
* 根据关键字搜索文件
* @param folder
* @param keyWord
* @return
*/
public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件
File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
@Override
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
JSONObject object = new JSONObject();
if (pathname.isFile()){// 如果是文件
object = isContainContent(pathname,keyWord);
}
// 目录或文件包含关键字,如果还要进行文件内容搜索,可以在此处加上上述1中的方法:|| (pathname.isFile() && object.getBoolean("flag"))
if (pathname.isDirectory()
|| (pathname.isFile() && pathname.getName().toLowerCase().contains(keyWord.toLowerCase()))){
return true;
}
return false;
}
});
List<File> result = new ArrayList<File>();// 声明一个集合
for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
result.add(subFolders[i]);
} else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
result.toArray(files);// 集合数组化
return files;
}