输入指定关键字,在制定目录中查找包含关键字的文件,返回包含指定关键字的文件路径。

package net.xsoftlab.baike;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List; //操作查找文件的类
public class TextSearchFile {
static int countFiles = 0;// 声明统计文件个数的变量
static int countFolders = 0;// 声明统计文件夹的变量 public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件 File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
@Override
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
if (pathname.isFile())// 如果是文件
countFiles++;
else
// 如果是目录
countFolders++;
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;
} public static void main(String[] args) {// java程序的主入口处
File folder = new File("E:/logs");// 默认目录
String keyword = "x";
if (!folder.exists()) {// 如果文件夹不存在
System.out.println("目录不存在:" + folder.getAbsolutePath());
return;
}
File[] result = searchFile(folder, keyword);// 调用方法获得文件数组
System.out.println("在 " + folder + " 以及所有子文件时查找对象" + keyword);
System.out.println("查找了" + countFiles + " 个文件," + countFolders + " 个文件夹,共找到 " + result.length + " 个符合条件的文件:");
for (int i = 0; i < result.length; i++) {// 循环显示文件
File file = result[i];
System.out.println(file.getAbsolutePath() + " ");// 显示文件绝对路径
}
}
}

最新文章

  1. 查看linux机器是32位还是64位的方法
  2. .Net , 请取服务器上的文件
  3. CSS3伪类选择器 图示
  4. 渐变颜色的进度条WGradientProgress-备用
  5. 翻书的效果:FMX.TSwipeTransitionEffect Animation
  6. Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)
  7. oracle 数据库删除表或表数据恢复问题
  8. Java AOP (2) runtime weaving 【Java 切面编程 (2) 运行时织入】
  9. LeetCode-11. 盛最多水的容器
  10. 初学Git命令
  11. 《DOM Scripting》学习笔记-——第七章 动态创建html内容
  12. SQL Server中的标识列
  13. strong vs copy
  14. 【LOJ】#2546. 「JSOI2018」潜入行动
  15. freePBX汉化方法记录——备忘
  16. 【纪中集训2019.3.12】Z的礼物
  17. E - Down or Right Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
  18. Python使用struct处理二进制(pack和unpack用法)
  19. 在myeclipse中换项目的jdk版本,你需要做哪些?
  20. HDU3308 线段树(区间合并)

热门文章

  1. Python爬虫实战:2017中国最好大学排名
  2. 4种PHP回调函数风格
  3. [转帖]Kubernetes及容器编排的总体介绍【译】
  4. Delphi中快速修改变量名称
  5. maven使用阿里镜像配置文件
  6. 【BZOJ4500】矩阵(差分约束)
  7. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)
  8. 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)
  9. EasyUI 格式化列
  10. 基础知识--:before伪元素和:after伪元素