Java File类学习笔记4:自定义一个类,过滤指定扩展名的文件

自定义一个类,继承FileNameFilter类,获得某一目录下所有指定扩展名的文件。

方法一:

/**
 * 说明:
 * 自定义FilterByJava类,过滤指定扩展名的文件
 *
 */
import java.io.File;
import java.io.FilenameFilter;

public class FilterByJava implements FilenameFilter{

	private String ext;

	public FilterByJava(String ext) {
		this.ext = ext;
	}

	public boolean accept(File dir, String name) {
		// TODO Auto-generated method stub
		return name.endsWith(ext);
	}
}

方法二:

FilenameFilter是一个接口,所以需要写一个实现类来实现该接口。我希望实现了该接口的类,可以过滤多种文件类型。示例代码如下:

package com.daxiang.filter;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class FileFilterTool implements FilenameFilter {

	List<String> types;

	protected FileFilterTool() {
		types = new ArrayList<String>();
	}

	protected FileFilterTool(List<String> types) {
		super();
		this.types = types;
	}

	public boolean accept(File dir, String filename) {
		// TODO Auto-generated method stub
		for (Iterator<String> iterator = types.iterator(); iterator.hasNext();) {
			String type = (String) iterator.next();
			if (filename.endsWith(type)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 添加指定类型的文件。
	 *
	 * @param type 要添加的文件类型,如".jpg"。
	 */
	public void addType(String type) {
		types.add(type);
	}
}

在以上代码中,为FilenameFilter对象添加了一个成员变量types,以接收指定类型。方法addType(Stringtype)是为过滤器添加需要过滤的文件类型,其内容为文件的后缀名,如".jpg"。

public boolean accept(File dir, String filename)是实现FilenameFilter接口时要重写的方法,用循环迭代判断文件名的后缀名是否为types中的类型,是则返回true。当types中没有该文件的后缀名时,返回false。

  在定义的类中,构造方法写了两个,一个是不带参数的,此时自己创建一个ArrayList对象,用以储存文件类型。另一个是带List对象参数的,该对象由用户创建。

    使用时代码如下:

package com.daxiang.filter;

import java.io.File;

public class Test {
	public static void main(String args[]){
		String path = "d:\\daxiang";
		File file = new File(path);
		FileFilterTool filenameFilter = new FileFilterTool();
		filenameFilter.addType(".jpg");
		filenameFilter.addType(".mp3");
		File[] files = file.listFiles(filenameFilter);
		for (int i = 0; i < files.length; i++) {
		    System.out.println(files[i].getName());
		}
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 05:57:07

Java File类学习笔记4:自定义一个类,过滤指定扩展名的文件的相关文章

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

Java File IO学习笔记

声明:以下转载自:Java中的File文件类详解 文件操作在Java的io操作中占有十分重要的地位,本文从以下几个方面来接受Java中对文件的操作. 1.Java中新建或者删除一个文件,文件夹以及createNewFile(),delete(),mkdir(),mkdirs()函数的使用. 2. 判断文件的函数:exists(),isFile(),isAbsolute(),isDirectory(),canRead(),canWrite(),isHidden()函数的使用. 3. 文件属性的函数

转:C#制作ORM映射学习笔记一 自定义Attribute类

之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己的小项目吗管他的,自己爽就行了).不过现在世面上的ORM映射基本都是为web项目设计的,与unity项目很难契合,所以我决定自己做一个简易的ORM映射.虽然想的很美但是实际做起来才发现还是挺复杂的,所以我在这里记录一下这次的开发过程,防止以后遗忘. 今天先记录一下如何通过自定义attribute类实

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

java学习笔记07--日期操作类

java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. [java] view plaincopy public class T { public static void main(String[] args) { Date date  = new Date(); System.out.println("当前日期:"+date); //当前日期:Thu May 16 23:00:57 CST 

Java学习笔记_23_List接口实现类

23.List接口实现类: List接口继承了Collection接口,它是一个允许存在重复项的有序集合. 1>实现类ArrayList: ArrayList类支持可随需要而增长的动态数组.数组列表以一个原大小被创建,当超过了它的大小, 类集自动增大,当对象被删除后,数组就可以缩小. 优点:ArrayList类对于使用索引取出元素用较高的效率,他可以用索引快速定位对象. 缺点:ArrayList类对于元素的删除或插入速度较慢. 构造方法: · ArrayList(): 构造一个初始容量为10的空

java之jvm学习笔记五(实践写自己的类装载器)

java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类装载器和安全管理器是可以被动态扩展的,或者说,他们是可以由用户自己定制的,今天我们就是动手试试,怎么做这部分的实践,当然,在阅读本篇之前,至少要阅读过笔记三. 下面我们先来动态扩展一个类装载器,当然这只是一个比较小的demo,旨在让大家有个比较形象的概念. 第一步,首先定义自己的类装载器,从Clas

Java多线程技术学习笔记(二)

目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和wait的区别 停止线程的方式 守护线程 线程的其他知识点 一.线程间的通信示例 返目录回 多个线程在处理同一资源,任务却不同. 假设有一堆货物,有一辆车把这批货物往仓库里面运,另外一辆车把前一辆车运进仓库的货物往外面运.这里货物就是同一资源,但是两辆车的任务却不同,一个是往里运,一个是往外运. 下面

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这