`

commons-io之filefilter学习

阅读更多

1. IOFileFilter接口

 

 

这个接口就是分别实现了FileFilter和FilenameFilter这个两个接口,作为最上层的

接口,这个在后面的所有的filefilter里面可能都会实现这个接口

 

2. ConditionalFileFilter接口

 

 

这个接口从名字上可以看出来就是对一系列的FileFilter做操作,然后实际上就是实现了

对IOFileFilter的增,删,查和设置操作。其实我们应该能想到得是肯定会有子类去实现这个

接口来实现一些FileFilter的组合逻辑。比如And,Or等等,我们下面就会看到。

 

3.AbstractFileFilter抽象类

 

 

这个类其实也没什么,主要是实现了IOFileFilter,但是这个实现稍微有点技巧,就是

类被标记成abstract了,但是方法都是实现了,在类的注释里面也写的很清楚,就是子类

必须实现其中一个方法,负责就陷入到死循环中去了,我们来稍微看一下吧。


 public boolean accept(File file) {

        return accept(file.getParentFile(), file.getName());

    }

  这个实际上是FileFilter的实现,它调用了FilenameFilter的实现。

 

 

public boolean accept(File dir, String name) {

        return accept(new File(dir, name));

    }

这个实际上是FilenameFilter的实现,它调用了FileFilter的实现。


所以这个就有了像注释里面说的,如果不实现其中一个就会陷入到死循环之中。

 

4. AgeFileFilter类的理解

 

 

这个类比较好理解,实际上就是用户可以指定一个时间,然后选出来这个时间点新或者旧

的文件,由acceptOlder这个标志位进行标记。这个实现我想大家应该自己都会写,就是

取得当前文件的最后修改时间,然后和用户传近来的时间点做比较,再根据acceptOlder标志位来看看应该accept。

 

5. CanReadFileFilter类的理解

 

 

这个类比较好理解,从类名上我们就可以看出就是实现对文件的canRead的一个筛选,

这个不多讲了,大家都会明白的。

 

6. CanWriteFileFilter类的理解

 

这个类也比较好理解,从类名上我们可以看出就是实现对文件的canWrite的一个筛选,

这个也不多讲了,大家都很明白。

 

 

7. DelegateFileFilter类的理解

从这个类的命名上我们就可以看出,这个类的意图是实现delegate操作的,这个类是实现

IOFileFilter的,那么在这个实现类里面就肯定要传近来两个delegate,一个是FileFilter,

一个是FilenameFilter,然后调用delegate的accept方法,如果某一个FileFilter是null

的时候就调用父类的就行了。

 

8. DirectoryFileFilter类的理解

从这个类的命名上我们也可以看出,就是为了实现筛选目录功能的,肯定在实现的时候会调用File的isDirectory方法就行了。

 

9. EmptyFileFilter类的理解

从这个类的命名上我们也可以看出,就是来判断File或者Directory是不是empty,对于目录来说,是判断它底下有没有file,当然也包括directory了,对于file来说就是判断它的length是不是0。

 

10. FalseFileFilter类的理解

这个类最好理解了,就是两个accept方法都返回false,做的比较绝情,真不知道在什么场景下用。

 

11. FalseFileFilter类的理解

这个类也很好理解,就是在accept方法里面判断文件是不是File类型,然后将结果返回

 

12. HiddenFileFilter类的理解

这个类也很好理解,就是在accept方法里面判断文件是不是隐藏文件,这个就不多说了

 

13. NameFileFilter类的理解

这个类的意图如果我们看类名的话估计是会因为它实现的是和FilenameFilter差不多,其实不然。

这个类主要是实现了,以指定的Name或者Name[]来进行Filter文件的功能。其实还有一个就是大家

看到Name应该就会想到Case Sentivity的问题,所以在这里,作者已经想到了,就是会传递一个

IOCase进来,可以指定是否大小写敏感。


下面的例子中给出了它的典型应用

File dir = new File(".");

 String[] files = dir.list( new NameFileFilter("Test") );

 for ( int i = 0; i < files.length; i++ ) {

     System.out.println(files[i]);

 }


我想我们应该能想到它是怎么实现的,不过还是稍微看一些它的代码:


public boolean accept(File file) {

        String name = file.getName();

        for (int i = 0; i < this.names.length; i++) {

            if (caseSensitivity.checkEquals(name, names[i])) {

                return true;

            }

        }

        return false;

    }

就是拿到文件名,然后遍历传递过来的文件数组进行循环,再使用CaseSessiontity进行判断,

如果有一个满足跳进啊,就直接返回。

 

14. NotFileFilter类的学习

 

这个类从名字上我们可以看出就是实现FileFilter的Not操作,但是稍微有点不同的是,就是对代理的FileFilter做非操作。这个就不仔细讲了,大家都明白。

 

15. OrFileFilter类的学习

 

这个类的名字是实现ConditiaonalFileFilter的,也就是对一系列的FileFilter实现或逻辑,

如果有一个满足条件,那么就返回。我就不贴代码了。我们可以想一下,如果让我们来实现这个的话,应该是什么样子的,肯定是要用一个List来保持要进行Or操作的所有的FileFilter了,然后就是可以要实现对这个List的add,remove,get和获得操作,然后在最重要的accept方法里面会遍历这个List进行accept操作,然后又符合要求的就直接返回。

 

16. PrefixFileFilter类的学习

 

这个类的意图感觉从名字上可以清晰地看出来,就是根据文件的前缀进行Filter文件,那么提到这个我们应该能想到这个应该是CaseSensitivity的。我们应该也能想到,就是这个在构造函数里面应该要传递一个筛选的Prefix数组进行filter,所以这个类的大体框架也就有了,就是一个IOCase,一个用于过滤的prefix数组,具体的实现逻辑我就不讲了,感觉稍微想一下,看看我们如果写的是怎么实现,它现在是怎么说实现的,然后比较一下我感觉会有帮助的。

 

17. RegexFileFilter类的学习

 

这个类我们从名字上应该能看出来意图,主要是接收一个Pattern,然后再根据文件名来判断是不是

和当前的Pattern里面是不是匹配,这个也很好理解。

只给我一个使用实例吧:


File dir = new File(".");

 FileFilter fileFilter = new RegexFileFilter("^.*[tT]est(-\\d+)?\\.java$");

 File[] files = dir.listFiles(fileFilter);

 for (int i = 0; i < files.length; i++) {

   System.out.println(files[i]);

 }

 

 

18. SizeFileFilter类的学习

这个类从命名上就可以看出它第意图,就是根据文件的大小来进行筛选文件。那么如果我们来实现这个功能的话,肯定是要有两个很重要的参数,一个是可接受的大小,一个是满足条件的是比传入的值大,还是小。 它也是这么实现的,一个是size属性,一个是acceptLarger属性,所以这个的实现我想大家应该也明白了,就不多讲了。

 

19. SuffixFileFilter类的学习

 

这个类从命名上也很容易看到它的意图,就是根据suffix来进行对文件的过滤,这个肯定是对文件进行过滤的,所以如果是文件名是以suffix提供的文件名结束的就返回。

 

20. TrueFileFilter类的学习

 

这个类实现的特别简单,关键不知道有什么用,两个都返回true,那和不是有FileFilter有什么区别呢,不懂。

 

21. WildcardFileFilter类的学习

这个类应该是整个FileFilter体系里面最复杂的一个类了。我们来好好看一下这个类,然后做一个总结。 今天脑子有点晕这个就不讲了,感觉还比较复杂,等哪天清晰了再分析,今天不行了,脑子转不过来了。


 

 

分享到:
评论

相关推荐

    commons-io-2.6.jar下载

    Commons IO 是 Apache Software Foundation 开发的一个 Java 库,它的核心组件是 `commons-io-2.6.jar`。这个版本的 JAR 文件包含了丰富的输入/输出流、文件操作、I/O 流工具类以及与文件系统交互的相关功能。下面将...

    commons-io-2.6.jar

    《Apache Commons IO 2.6在Java开发中的应用详解》 Apache Commons IO是Apache软件基金会的一个开源项目,它提供了一系列实用的I/O操作工具,极大地简化了Java开发中与输入/输出相关的任务。其中,`commons-io-2.6....

    commons-io-1.4-src.zip_commons-_commons-fileupload_commons-io_co

    除了这些核心组件,Commons-IO库还提供了许多其他功能,如文件过滤器(`FileFilter`),线程安全的缓冲流(`BufferedInputStream`和`BufferedOutputStream`),以及用于处理字符集转换的工具类(`Charsets`)等。...

    commons-fileupload-1.2.1和commons-io-1.4

    Apache Commons FileUpload和Commons IO库为开发者提供了强大的支持。这两个库在Java社区中被广泛使用,为处理文件流、读写文件以及文件上传下载提供了一系列实用工具。 Apache Commons FileUpload是一个专门处理...

    jar包-commons-io-2.4.jar

    "jar包-commons-io-2.4.jar" 这个标题表明我们正在讨论一个Java Archive (JAR) 文件,具体是Apache Commons IO库的2.4版本。JAR文件是Java平台特有的归档格式,用于集合多个Java类文件、资源文件以及其他元数据,...

    commons-io.zip

    - `commons-io-2.5-sources.jar`: 这是2.5版本的源代码,方便开发者查看和学习源码。 - `commons-io-2.6.jar`: 这是2.6版本的编译后的二进制库,可以在项目中直接引用以使用其功能。 - `commons-io-2.5.jar`: 这是...

    commons-io-2.6-bin.rar

    Apache Commons IO 是一个Java库,专门用于处理输入/输出流操作。这个库包含了大量实用工具类,可以帮助开发者更高效地处理文件、流、过滤器、读写操作等。"commons-io-2.6-bin.rar" 是Apache Commons IO库的二进制...

    commons-io-1.4.rar_commons io_commons-io-1.4_commons-io-1.4.jar

    Apache Commons IO 是一个Java库,提供了大量的实用工具类来处理输入/输出操作。这个压缩包“commons-io-1.4.rar”包含的是Apache Commons IO库的1.4版本。Apache Commons IO库是Java开发者非常常用的一个组件,它...

    commons-io-2.CHM

    apache commons-io-2.CHM帮助文档 一、FileUtils 打开FileUtils的api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下: cleanDirectory:清空目录,但不删除目录。 contentEquals:比较两个...

    commons-io-1.4.jar.zip

    3. **文件过滤器**:Apache Commons IO 提供了 `FileFilter` 和 `IOFileFilter` 接口,以及它们的一些实现类,如 `TrueFileFilter`、`FalseFileFilter` 和 `DirectoryFileFilter`。这些过滤器可以用于按名称、大小、...

    commons-io-2.2-bin.zip

    Apache Commons IO 是一个Java库,专门设计用于处理输入/输出(IO)操作。这个库包含了大量实用工具类,简化了对文件、流、字符集、缓冲区、读写操作等的处理。标题中的"commons-io-2.2-bin.zip"指的是Apache ...

    commons-io-2.4-src.zip

    "commons-io-2.4-src.zip"是一个包含Apache Commons IO 2.4版本源代码的压缩文件,对于开发者来说,这是一个学习和理解该项目内部实现、调试或扩展功能的重要资源。 在这个源代码包中,你可以找到以下关键知识点: ...

    commons-fileupload-1.2.2 + commons-io-1.4

    Apache Commons FileUpload与Apache Commons IO是Java开发中用于处理文件上传功能的重要库。这两个库的组合,特别是版本1.2.2的FileUpload和1.4的IO,为开发者提供了强大的工具来处理HTTP请求中的多部分文件上传。 ...

    commons-io-1.4.jar

    《Apache Commons IO 1.4:文件操作与文件上传的核心库》 Apache Commons IO 是一个由Apache软件基金会开发的Java库,它提供了大量的文件操作相关的工具类和实用方法,极大地简化了Java中的文件处理工作。在给定的...

    commons-io-2.0.jar

    《Apache Commons IO 2.0:Java I/O操作的核心库》 Apache Commons IO是Java开发中的一个关键组件,尤其在处理输入/输出流、文件、字符集、串行化等方面,它提供了大量的实用工具类和扩展功能。在这个讨论中,我们...

    org.apache.commons.io.FileUtils

    Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理文件系统操作。这个类在Java开发中被广泛使用,尤其是在处理大量的文件读写和管理任务...

    apache commons IO工具包

    Apache Commons IO中提供的`FileFilter`组件是非常强大的文件过滤机制,允许开发者根据不同的条件来过滤文件或目录。这些过滤器都实现了`java.io.FileFilter`和`java.io.FilenameFilter`接口。 - **TrueFileFilter*...

    org.apache.commons.io.jar

    《Apache Commons IO库详解》 Apache Commons IO是Java开发中常用的一个开源库,其核心组件是`org.apache.commons.io.jar`文件。这个库提供了一系列高度实用的I/O操作类,大大简化了对输入/输出流的处理,为开发者...

    apache commons IO 工具包使用

    Utility 类是 Commons IO 中最常用的部分之一,主要包括以下几种: - **FileUtils**:用于文件和目录的操作,例如复制、移动、删除文件或目录等。 - **IOUtils**:用于处理各种 Input/Output Stream 的操作,比如...

    JAVA文件监控(源码)

    通过commons-io监测文件。可检查目录的文件新建、修改、删除等变化。 // 监控目录 String rootDir = "c:\\Downloads"; // 轮询间隔 10 秒 long interval = TimeUnit.SECONDS.toMillis(10); //文件格式 IOFileFilter ...

Global site tag (gtag.js) - Google Analytics