FilenameFilter学习

从给定的一个路径中筛选中某种格式的文件,通常的做法,便是遍历该目录,然后按照文件后缀来判断该文件是否符合判断条件。

public class FileFilter {

	public static void main(String[] args) {
		File filepath = new File("F:\\论文\\中国知网论文\\中国知网论文");
		List<File> list = filterFile(filepath);
		System.out.println(list.size());
	}

	public static List<File> filterFile(File file) {
		List<File> list = new ArrayList<File>();
		File[] fileList = file.listFiles();
		for (int i = 0; i < fileList.length; i++) {
			// 判断该file是否是目录,是目录,则继续深入遍历
			if (fileList[i].isDirectory()) {
				filterFile(fileList[i]);
			// 是文件时,判断后缀是否是PDF结尾,是则截取出来该文件
			} else if (fileList[i].getName().endsWith(".pdf")) {
				list.add(fileList[i]);
			}
			else
				continue;
		}

		return list;
	}
}

其实 java的File 类有一个自带的过滤方法,即FilenameFilter接口

FilenameFilter接口自带一个accept方法,过滤符合条件的文件类型

package java.io;

/**
 * Instances of classes that implement this interface are used to
 * filter filenames. These instances are used to filter directory
 * listings in the <code>list</code> method of class
 * <code>File</code>, and by the Abstract Window Toolkit's file
 * dialog component.
 *
 * @author  Arthur van Hoff
 * @author  Jonathan Payne
 * @see     java.awt.FileDialog#setFilenameFilter(java.io.FilenameFilter)
 * @see     java.io.File
 * @see     java.io.File#list(java.io.FilenameFilter)
 * @since   JDK1.0
 */
public interface FilenameFilter {
    /**
     * Tests if a specified file should be included in a file list.
     *
     * @param   dir    the directory in which the file was found.
     * @param   name   the name of the file.
     * @return  <code>true</code> if and only if the name should be
     * included in the file list; <code>false</code> otherwise.
     */
    boolean accept(File dir, String name);
}

FilenameFilter 接口中的accept方法,主要判断给定的文件是否包含在该目录中

通过FilenameFilter 接口改造后的代码

public class FileFilter {

	public static void main(String[] args) {
		File filepath = new File("F:\\论文\\中国知网论文\\中国知网论文");
		List<File> list = filterFile(filepath);
		System.out.println(list.size());
	}

	public static List<File> filterFile(File file) {
		// 定义变量list来接收最后的文件列表
		List<File> list = new ArrayList<File>();

		// 将文件类型给到FilterName 中
		FilterName filter = new FilterName(".abcd"); 

		// 文件过滤
        String[] files = file.list(filter);  

        // 由于File.list(FilenameFilter filter) 返回结果为数组
        // 此处将数组转换为list
        if (null != files) {
            for (String fileName : files) {
            	list.add(new File(fileName));
            }
        }

		return list;
	}
}

class FilterName implements FilenameFilter {

	private String type;

	// 构造方法,定义要过滤的文件类型
    FilterName(String type) {
    	this.type = type;
    }

	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(type);
	}
}
时间: 2024-08-01 11:10:07

FilenameFilter学习的相关文章

JavaSE8基础 File FilenameFilter 筛选出指定后缀名的文件

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) code: package jizuiku0; import java.io.File; import java.io.FilenameFilter; /* * @version V17.09 */ public class Filter { public static void main(String[] args) { //

Java IO学习第一天部分详解

初学Java,记录总结老师授课的IO基础笔记 IO流:(Input OutPut) 输入输出流: 输入 :将文件读到内存中  输出:将文件输出到其他地方. IO技术的作用 : 主要就是解决设备和设备之间的数据传输问题. 比如:硬盘到--->内存  ,内存数据--->硬盘中   把键盘中的数据写入到内存. IO的应用场景: 比如: 打卡机到出信息表 比如: 注册的时候图片的上传. 比如 : 下载功能 解析XML 数据保存到本地,数据一个永久保存.数据保存到磁盘上是以文件的形式存在的. 学习文件的

java学习--IO

Java流操作有关的类或接口: IO中的继承图表 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别:

java基础----&gt;FilenameFilter的使用

FilenameFilter用于对列表中文件名的过滤,今天我们就开始java中FilenameFilter的学习. java中FilenameFilter的使用 java文档对FilenameFilter的描述: Instances of classes that implement this interface are used to filter filenames. These instances are used to filter directory listings in the l

Java学习笔记4

1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库. ③.JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.

学习使用Delphi for android 调用Java类库

http://blog.csdn.net/laorenshen/article/details/41148253 学习使用Delphi for android 调用Java类库 2014-11-15 18:36 1053人阅读 评论(0) 收藏 举报  分类: 安卓开发(27)  Android是一套非常优秀的移动端操作系统,Delphi Xe5中也能直接调用SDK中提供的各项API,但是delphi自己封装的AndroidAPI非常少,在安装目录的 source\rtl\android 中,而

Java基础学习笔记十九 IO

File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘.光盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作.当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作.因此我们把这种输入和

图解 Java IO : 二、FilenameFilter源码

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 从上一篇 图解 Java IO : 一.File源码 并没有把所有File的东西讲完.这次讲讲FilenameFilter,关于过滤器文件<Think In Java>中写道: 更具体地说,这是一个策略模式的例子,因为list()实现了基本功能,而按着形式提供了这个策略,完

Jsoup学习笔记10:Saz2Csv解析器

经过了一系列的学习和摸索,Jsoup学习笔记即将告一段落,第11篇学习笔记将会把本篇实现的功能界面化,并做成一个可直接执行的exe文件.后续的项目如果需要更深入的学习Jsoup,还会继续更新. 本篇笔记主要是对前面的9篇笔记进行整合,初步实现saz格式文件到csv文件转换的基本功能,程序要实现的基本功能主要是: 1.saz文件遍历:获取Java工程所在目录的上层目录中,指定扩展名(.saz)的文件, 2.遍历获得的上层目录,复制包含指定文件(.saz)的所有文件夹,并在创建的同名文件夹中创建同名