[原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法
前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用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接口的特殊用法的更多相关文章
- java中的File类
File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...
- Java学习笔记-File类的基本方法
要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...
- 详谈JAVA中的file类与IO流
File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...
- Java中的File类,递归是什么?
一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...
- 用Java中的File类模拟实现对系统文件的增删改查效果
码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...
- java中关于File类的细说
File类是我们接触的比较多的类,当初学习是真是傻傻分不清啊.今天就总结一下file的一些比较不好区分的地方. 首先:当然就是构造方法 File f = new File("文件路径&quo ...
- java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结
环境:环境是内网windows,传入路径的时候不带盘符,并且服务器的win10也不是超级管理员账户 关于File类的mkdirs()远程访问创建不了文件和路径的问题. 如果浏览器操作者是windows ...
- Java中的Object类的toString()方法,equals()方法
Object类是所有类的父类,若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法: 1.toString 如果输出一个对象的时候 ...
- Java中使用File类删除文件夹和文件
删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...
随机推荐
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- Velodyne线性激光雷达pcap文件格式及写入、数据解析 Lebal:激光雷达
转载自https://blog.csdn.net/qq_25241325/article/details/80766305 roslaunch loam_velodyne loam_velodyne. ...
- modelform实例学习
先来回顾下form的用法 一对多关系,form显示的是下拉框 多对多关系,form显示的是多选框 modelform的用法 modelsform的写法 from django.forms import ...
- ASP.NET页面传值加号变空格解决办法
只需要把欲传值进行编码 string EncodeId = Server.UrlEncode(id); 加号就变成了 % 2 B (中间无空格) 然后再传出去. Request.QueryStrin ...
- PHP开发环境正确的错误信息处理
正确记录配置 php.ini display_errors = On error_reporting = E_ALL log_errors = On error_log = F:/data/php/e ...
- TableView被Navigation bar挡住的解决办法
在存在遮挡的ViewController的ViewDidload函数里添加以下两句即可解决 self.edgesForExtendedLayout = UIRectEdge.None self.aut ...
- krpano之背景音乐
步骤: 1.添加音乐控制插件 <!-- START:音乐控制 --> <plugin name="soundinterface" url="%SWFPA ...
- Java发送邮件Utils
/** * 类文件说明 * */ public class SendMail { Logger log = Logger.getLogger(SendMail.class); /** * 发送邮件 * ...
- angularJS笔记之过滤器
angular的过滤器用法: 1.模板中使用 {{expression|filter}} 也可以多个filter连用 {{expression|filter1|filter2|...}} filter ...
- Monthly Expense(二分--最小化最大值)
Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...