IO流2之文件夹的

第一张图显示的是指定目录下的文件夹和文件的名字。

第二张图获取的是给定目录下的文件。File files[]=dir.listfile();

在建立完文件对象之后,最好都进行判断文件或文件夹在本地或者服务器是否存在。若不存在则创建。存在则进行下一步操作。对文件和文件夹都可以进行增删改差的操作。

2 File类种过滤器。

过滤器目的在于只取得我所给定的路径上在本地或者服务器上的我想要的文件或文件夹。例如某个目录下,我只想要拿取后缀为.java的文件。javaIo中有过滤器的接口FilenameFilter,我们只需要去实现它就行。

(1)获取全部列表

在使用File对象调用不带参数的list()方法,我们会得到该File对象包含的全部列表。
例如
(1)String[] flist = file.list();
(2)File[] flist = file.listFiles();
这两个方法返回file下的所有文件或目录;

(2)获取受限列表
然而有的时候我们并不需需要获取全部列表,我们只想获取一个受限的列表。例如,我们想得到所有扩展名为.java的文件,这种情况下,我们就需要用到FilenameFilter。
调用方式如下:
(1)String [] fs = f.list(FilenameFilter filter);
(2)File[]fs = f.listFiles(FilenameFilter filter);

其中java.io.FilenameFilter是文件名过滤器,作为list()过滤的标准。list()方法中传入FilenameFilter实例,list方法就可以根据FilenameFilter实例中的accept()方法作为过滤的依据。来过滤不符合规格的文件名,留下合格的文件。可以看list()的源码来详细了解调用accpet()方法的过程。

list(FilenameFilter filter)源码:

public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {/*this代表调用当前方法的对象*/
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
可以看到,list(FilenameFilter filter)这个方法,还是先调用无参的list()方法,获取所有的列表,然后再调用FilenameFilter接口实例的accept()方法进行过滤,将符合条件的加入到List集合中,最后把List集合转为String数组返回。

猜你喜欢

转载自www.cnblogs.com/xlp123456/p/11121245.html