热门标签 | 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 }



推荐阅读
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 本文介绍如何在Java中实现一个罗马数字计算器,重点在于如何通过循环和字符验证确保用户输入合法。我们将探讨创建一个方法来检查字符串中的非法字符,并使用循环不断提示用户输入,直到输入符合要求。 ... [详细]
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社区 版权所有