前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批获取文件夹中的文件了

解决方法:分批获取文件,每次获取一定数量

  而File类中没有直接筛选数量的方法和参数,但是有list(FilenameFilter)方法,FilenameFilter一般是用来过滤返回文件列表的文件类型的,这里我们借助他来实现返回一定数量文件的功能。

  首先创建一个类,实现FilenameFilter接口:

package test;

import java.io.File;
import java.io.FilenameFilter; /**
* 文件数量过滤类
* @author Guangshan
*/
public class FileNumFilter implements FilenameFilter { private int maxFileNum;
private int fileCount; //记录文件数 public FileNumFilter(int maxFileNum) {
this.maxFileNum = maxFileNum;
} @Override
public boolean accept(File dir, String name) {
if(fileCount >= maxFileNum)
return false;
else
fileCount++;
return true;
}
}

  代码很简单,就是使用类成员变量来记录数量变化,每收到一个文件数量加一,直到达到规定的数量,则不再接受文件。

  调用也很简单:

package test;

import java.io.File;

public class Test {
public static void main(String[] args) {
File test = new File("D:\\test");
String[] fileList = test.list(new FileNumFilter(10));
}
}

  这样获取的String[]的size就是10了。

PS:当使用while(true)进行死循环时,一定要使用sleep(1),哪怕只有1ms,对CPU的占用也会极大的减少。

PPS:小技巧,判断一个文件正在使用(包括被其他程序使用,被作为InputStream打开等等情况),可以使用:

File a = new File(path);

boolean b = a.renameTo(a);

根据b可以判断是否在占用

[原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法的更多相关文章

  1. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

  2. Java学习笔记-File类的基本方法

    要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...

  3. 详谈JAVA中的file类与IO流

    File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...

  4. Java中的File类,递归是什么?

    一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...

  5. 用Java中的File类模拟实现对系统文件的增删改查效果

    码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...

  6. java中关于File类的细说

    File类是我们接触的比较多的类,当初学习是真是傻傻分不清啊.今天就总结一下file的一些比较不好区分的地方. 首先:当然就是构造方法 File f = new File("文件路径&quo ...

  7. java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结

    环境:环境是内网windows,传入路径的时候不带盘符,并且服务器的win10也不是超级管理员账户 关于File类的mkdirs()远程访问创建不了文件和路径的问题. 如果浏览器操作者是windows ...

  8. Java中的Object类的toString()方法,equals()方法

    Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...

  9. Java中使用File类删除文件夹和文件

    删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...

随机推荐

  1. Java课程设计——坦克大战

    坦克大战——坦克类 一. 团队课程设计博客链接 https://www.cnblogs.com/chenhuilin/p/10275664.html 二.个人负责模块和任务说明 模块:坦克类(玩家坦克 ...

  2. C++对Lua中table进行读取、修改和创建

    C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...

  3. andriod/ios webview与js交互 html_demo

    <html> <head> <title>测试</title> </head> <body> <h3>Android ...

  4. python中对 函数 闭包 的理解

    最近学到 函数 闭包的时候,似懂非懂.迷迷糊糊的样子,很是头疼,今天就特意查了下关于闭包的知识,现将我自己的理解分享如下! 一.python 闭包定义 首先,关于闭包,百度百科是这样解释的: 闭包是指 ...

  5. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () { WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile (_T (&qu ...

  6. 第十三章 MySQL用户管理(待续)

    ·············

  7. sql中left join on where区别剖析

    select from tb1 left join tb2 on tb1.xx=tb2.xx and tb2.xxxx=5 先筛选tb2.xxxx=5 再把tb1与筛选后的临时表进行左连接. sele ...

  8. ndarray的创建与数据类型

    ndarray 多维数组(N Dimension Array) NumPy数组是一个多维的数组对象(矩阵),称为ndarray,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点. ...

  9. DDD学习笔录——提炼问题域之与领域专家一起获得领域见解

    业务和开发团队之间的协作是DDD必不可少的部分,并且它是处于开发阶段的产品获得成功的关键. 领域专家指的是那些从业务领域的政策和工作流程到棘手处和特性都具有深刻理解的人.能够为你的问题区域提供深刻见解 ...

  10. ajax请求参数中含有特殊字符"#"的问题 (另附上js编码解码的几种方法)

    使用ajax向后台提交的时候 由于参数中含有#  默认会被截断 只保留#之前的字符  json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...