搜索
首页Javajava教程总结Java IO文件过滤器的使用介绍

总结Java IO文件过滤器的使用介绍

Jun 17, 2017 pm 01:55 PM
java使用总结文件过滤器

java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式,下面分两部分来讲Java IO文件过滤器对命令设计模式的使用,一起看看吧

一. 点睛

java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式。通过对文件过滤器功能的简单使用,可以一窥java io流对命令设计模式的典型使用。下面分两部分来讲,先举例说说文件过滤器的简单使用,再引申到它是如何使用到命令设计模式的,不会大篇幅讲模式,对命令模式想做更深入的了解请参考其他资料。

二. 示例

我们进行java编程的时候,如果想要访问文件或者目录,会使用File类,File是一个很强大的类,不管文件还是目录都可以使用它。如果要遍历文件会使用到File类的list()方法,它会列出当前File对象的所有子文件名和路径名,如果有的文件名或者路径名不想要列出来怎么办?File类给提供了另外一个重载的具有过滤功能的方法list(FilenameFilter filter)可以满足我们的需要,方法声明如下:

public String[] list(FilenameFilter filter);

参数里面的FilenameFilter就是文件名过滤接口,该接口有一个方法accept()方法,我们自定义的文件名过滤器需要实现该接口,并实现accept()方法来自定义规则。FilenameFilter接口声明如下所示:

public interface FilenameFilter {
 boolean accept(File dir, String name);
}

下面来看具体怎么使用的,含义为列出当前工作空间下所有以.xml结尾的文件名或者路径名。

1. 编写自定义文件过滤器:

package org.light4j.io.fileFilter;
import java.io.File;
import java.io.FilenameFilter;
/**
 * 自定义文件名过滤器
 * 
 * @author longjiazuo
 * 
 */
public class MyFilenameFilter implements FilenameFilter {
 @Override
 public boolean accept(File dir, String name) {
  // 如果文件以.xml结尾则符合条件返回true
  return name.endsWith(".xml");
 }
}

2. 编写测试类

package org.light4j.io.fileFilter;
import java.io.File;
/**
 * 文件过滤器测试
 * 
 * <p>
 * 列出当前工作目录下符合条件的所有子文件名和路径名
 * </p>
 * 
 * @author longjiazuo
 * 
 */
public class FilenameFilterTest {
 public static void main(String[] args) {
  // 获取工作目录
  String workDir = System.getProperty("user.dir");
  File file = new File(workDir);
  // 列举当前工作目录下的所有文件
  String[] files = file.list(new MyFilenameFilter());
  // 循环遍历
  for (String string : files) {
   System.out.println(string);
  }
 }
}

运行上面代码可以在控制台看到只列出以.xml结尾的文件名或者路径名。

三. 命令设计模式

命令模式是关于如何处理一个对象请求另外一个对象调用其方法完成某项功能的设计模式,当一个对象请求另外一个对象调用其方法时,并不和被请求的对象直接交互,而是把这种请求封装到一个命令对象中,具体做法是将请求封装在命令对象的一个方法里,将命令对象作为参数传递。命令模式的核心就是使用命令对象来封装方法的调用。

在项目中,我们不会只有一个类,所以经常涉及一个对象请求另外一个对象调用它的方法来达到某种目的。如果请求者这时候不希望或者无法直接和被请求者进行交互,换句话说就是请求者不包含被请求者的引用,那么这个时候二者如何进行交互?我们可以使用命令模式来达到目的。例如,我们日常点外卖,我们并不直接和饭店打交道,而是会上美团等外卖网站购买,外卖网站会把你要买外卖的请求作为一个点餐命令告诉饭店,只要该点餐命令被成功传递给饭店,你就一定能够收到外卖。

现在回到文件过滤器的使用上面来,File类的list(FilenameFilter filter)方法通过使用一个接口对象作为参数来实现过滤文件名的功能,具体的规则定义则是在FilenameFilter接口子类的方法accept()里面来实现的,这就是对命令设计模式的使用。

按道理,既然list(FilenameFilter filter)方法想要一个判断哪些文件需要被列出来的规则,那我们把规则传进去就行了,这个规则是一个代码块,但是目前的java并不支持向方法里面传入代码块的做法,所以java使用了FilenameFilter的accept()方法来封装判断规则,传入的MyFilenameFilter对象的作用其实是为了传入accept()方法的方法体,这个方法体的作用就是判断哪些文件名或者路径名符合规则,list(FilenameFilter filter)的实现源码如下所示:

以上是总结Java IO文件过滤器的使用介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Java平台独立性:OS之间的差异Java平台独立性:OS之间的差异May 16, 2025 am 12:18 AM

Java在不同操作系统上的表现存在细微差异。1)JVM实现不同,如HotSpot、OpenJDK,影响性能和垃圾回收。2)文件系统结构和路径分隔符不同,需使用Java标准库处理。3)网络协议实现差异影响网络性能。4)GUI组件外观和行为在不同系统上有别。通过使用标准库和虚拟机测试,可减少这些差异的影响,确保Java程序稳定运行。

Java的最佳功能:从面向对象的编程到安全性Java的最佳功能:从面向对象的编程到安全性May 16, 2025 am 12:15 AM

javaoffersrobustobject-IentiendedProgrammming(OOP)和Top-Notchsecurityfeatures.1)OopinjavainCludesClasses,对象,继承,多态性,和列出,andeclingfleximaintainablesys.ss.2)SecurityFeateTuersLudEtersludEterMachine(

JavaScript与Java的最佳功能JavaScript与Java的最佳功能May 16, 2025 am 12:13 AM

JavaScriptandJavahavedistinctstrengths:JavaScriptexcelsindynamictypingandasynchronousprogramming,whileJavaisrobustwithstrongOOPandtyping.1)JavaScript'sdynamicnatureallowsforrapiddevelopmentandprototyping,withasync/awaitfornon-blockingI/O.2)Java'sOOPf

Java平台独立性:收益,限制和实施Java平台独立性:收益,限制和实施May 16, 2025 am 12:12 AM

JAVAACHIEVESPLATFORMINDEPENTENCETHROUGHJAVAVIRTAILMACHINE(JVM)和BYTECODE.1)THEJVMINTERPRETSBBYTECODE,允许theingthesmecodetorunonanyanyanyanyplatformwithajvm.2)

Java:真实词的平台独立性Java:真实词的平台独立性May 16, 2025 am 12:07 AM

Java'splatFormIndependecemeanSapplicationsCanrunonAnyPlatFormWithAjvm,使“ Writeonce,RunanyWhere”。

JVM性能与其他语言JVM性能与其他语言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生产性。1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台独立性:使用示例Java平台独立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允许CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架构:深入研究Java虚拟机JVM架构:深入研究Java虚拟机May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

北端:融合系统,解释
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
4 周前By尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。