当前位置:科技动态 > [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法

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

  • 发布:2023-09-29 08:19

-->

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

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

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

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

封装测试; 导入java.io.File;
导入 java.io.FilenameFilter; /**
*文件计数过滤类别
* @作者光山
*/
公共类 FileNumFilter 实现 FilenameFilter { private int maxFileNum;
私有 int 文件计数; //记录文件数 公共 FileNumFilter(int maxFileNum) {
this.maxFileNum = maxFileNum;
} @覆盖
公共布尔接受(文件目录,字符串名称){
if(fileCount >= maxFileNum)
返回 false;
否则
文件计数++;
返回真;
}
}

  代码非常简单。它使用类成员变量来记录数量变化。每收到一个文件,数量就会增加一个。在达到指定数量之前,将不再接受任何文件。

  打电话也很简单:

封装测试; 导入java.io.File; 公开课测试{
公共静态无效主(字符串[]参数){
文件测试 = new File("D:\\test");
String[] fileList = test.list(new FileNumFilter(10));
}
}

  这样得到的String[]的大小为10。

PS:使用while(true)进行无限循环时,一定要使用sleep(1)。即使只有1ms,CPU的占用率也会大大降低。

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

文件a = 新文件(路径);

布尔 b = a.renameTo(a);

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

-->

相关文章