热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java编程实战:第13课文件过滤技术详解

1packageFileOperation;23importjava.io.File;4importjava.io.FileFilter;5importjava.util.Arra

1 package FileOperation;
2
3 import java.io.File;
4 import java.io.FileFilter;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 /*本程序在指定的文件夹以及其子文件夹里递归的寻找包含关键字的文件
9 * 1,使用FileFilter接口来过滤文件,实现FileFilter里的boolean accept(File pathname)
10 * 作为过滤规则
11 * 2,使用了匿名内部类,在过滤时常用匿名内部类来产生一个包含boolean accept过滤规则类的对象,
12 * 这样显得简洁一些,当然你也可以分成两个类来写,写一个类FileFiltertest来实现接口FileFilter
13 * 中的boolean accept方法,然后在另一个过滤的时候这样来写:
14 * File[] subFolders = folder.listFiles(new FileFiltertest);
15 * 3,也另一个接口FilenameFilter也可以作为过滤的接口,方法和上面的一样
16 * 4,注意递归文件夹的方法*/
17
18 public class SearchFile {
19
20 static int countFiles = 0,countFolders = 0;
21
22 public static void main(String[] args) {
23
24 //默认的folder和keyword
25 File folder = new File("C:\\windows");
26 String keyword = "setup";
27
28 //也可以参数传入指定的folder和keyword
29 if(args != null && args.length == 2)
30 {
31 folder = new File(args[0]);
32 keyword = args[1];
33 }
34
35 if(!folder.exists())
36 {
37 System.out.println("文件(夹)不存在: " + folder.getAbsolutePath());
38 return;
39 }
40
41 //调用searchFile方法返回File[]类型的result数组
42 File[] result = searchFile(folder,keyword);
43
44 System.out.println("" + folder + " 以及所有子文件里查找 " + keyword);
45
46 System.out.println("查找了 " + countFiles + " 个文件, " +
47 countFolders + " 个文件夹,共找到" + result.length + " 个符合条件的文件:" );
48
49 for(int i &#61; 0;i < result.length;i &#43;&#43;)
50 {
51 File file &#61; result[i];
52 System.out.println(" " &#43; file.getAbsolutePath());
53 }
54
55 }
56
57 //searchFile方法&#xff0c;
58 public static File[] searchFile(File folder,final String keyword)
59 {
60 //用匿名内部类讲过滤和过滤的类的实现放在一起了
61 File[] subFolders &#61; folder.listFiles(new FileFilter()
62
63 //匿名内部内开始&#xff08;在产生一个对象的时候定义这个类&#xff09;
64 {
65 public boolean accept(File pathname)
66 {
67 if(pathname.isFile()) countFiles &#43;&#43;;
68 else countFolders &#43;&#43;;
69
70 /*这个过滤规则是将文件夹或者含关键字的文件放入File[] subFolders里。
71 * 可见subFolders里既有满足条件的文件&#xff0c;也有一些文件夹(需要进一步递归去找)*/
72 if(pathname.isDirectory()||(pathname.isFile() &&
73 pathname.getName().contains(keyword)))
74 {
75 return true;
76 }
77 return false;
78 }
79 }
80 //匿名内部类结束
81 );//过滤结束&#xff0c;得到了一个File[] subFolders&#xff0c;subFolders在上面已经解释过
82
83 List resultList &#61; new ArrayList();//用一个resultList来存放最终的结果&#xff08;满足条件的文件&#xff0c;即进一步递归的结果&#xff09;
84
85 for(int i &#61; 0;i < subFolders.length;i &#43;&#43;)
86 {
87 //如果是subFolders[i]是文件&#xff0c;直接放入结果集中
88 if(subFolders[i].isFile())
89 {
90 resultList.add(subFolders[i]);
91 }
92 //如果subFolders[i]是文件夹&#xff0c;则在subFolders[i]下递归调用本方法。
93 else{
94 File[] subFolderResult &#61; searchFile(subFolders[i],keyword);
95 for(int j &#61; 0;j < subFolderResult.length;j &#43;&#43;)
96 {
97 resultList.add(subFolderResult[j]);
98 }
99 }
100 }
101
102 File[] result &#61; new File[resultList.size()];
103 resultList.toArray(result);//将list类型转化为数组类型放在result中
104
105 return result;//放回这个数组
106 }
107
108 }



推荐阅读
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • andr ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
author-avatar
kk1049057
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有