File 的实例方法 list()
2019-04-26 20:52
106 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39291919/article/details/89576323
File 的实例方法 list() 有两个重载方法。
- public String[] list()
无参方法,能够以 String[] 形式返回一个目录下的所有文件或文件夹的名字;如果 File 是文件,则返回 null。
用法:
[code]File dir = new File("E:" + File.separator); String[] list = dir.list();
- public String[] list(FilenameFilter filter)
有参方法,FilenameFilter 是 java.io 下的一个接口,只有一个方法:
[code]public interface FilenameFilter { boolean accept(File dir, String name); }
这个方法被用在该 public String[] list(FilenameFilter filter) 方法内:
[code]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])) { v.add(names[i]); } } return v.toArray(new String[v.size()]); }
其中,注意到:accept 返回 true,则执行 add 操作;否则,不执行。因此,accept 方法的返回值决定了是否添加文件名。
观察:
[code]public static void main(String[] args) { File dir = new File("E:" + File.separator); String[] list = dir.list(filter("*.java")); System.out.println(Arrays.toString(list)); } public static FilenameFilter filter(final String regex) { return new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }; }
ps:首先创建了一个 filter() 方法,它会返回一个指向 FilenameFilter 的引用,方法内部通过构造匿名类进行返回。其中匿名类负责提供 accpet() 方法,使 list() 可以回调 accpet(),进而以决定哪些文件包含在列表中。这种结构也常常称为回调。更具体地说,这是一个策略模式的例子,因为 list() 实现了基本的功能,而且按照 FilenameFilter 的形式提供了这个策略,以便完善 list() 在提供服务时所需的算法。
然而,可以进一步修改这个方法,定义一个作为 list() 参数的匿名类,这样程序会更小:
[code]public static void main(String[] args) { File dir = new File("E:" + File.separator); /* 假装 regex 是从用户输入接收的 */ final String regex = "*.java"; String[] list = dir.list(new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }); System.out.println(Arrays.toString(list)); }
相关文章推荐
- java.io.File.listFiles(FileFilter filter)方法实例
- Python中字典(dict)和列表(list)的排序方法实例
- Mysql 5.5.36 表分区方法步骤SQL实例 range、 list、 hash、 key 分区实践 常见错误解决
- graphx操作实例01-edgeListFile导入数据
- python list排序的两种方法及实例讲解
- java文件过滤器(File类listFiles方法可选参数)--获取目录下指定的某类文件
- C#控制台基础 int类型list集合forEach方法实例
- Python使用list的append和pop方法创建堆栈和队列实例代码
- java中File类中list()和listFiles()方法区别
- 使用 File 类中的 list 方法所遇到的状况
- Python 列表(List) 的三种遍历方法实例 详解
- Java File类中的list()和listFiles()方法简介
- 本方法用于获取指定文件夹的子文件夹中的图片名称,并写入到FileList.ini文件中去(格式...
- File的相关方法代码实例
- Arrays.asList(param)方法中param的不同,方法的返回值不同的实例分析
- python list列表排序的两种方法及实例讲解
- 18、File类使用list方法的一点奇怪现象
- J2SE基础夯实系列之File的相关方法代码实例
- [JS实例] input type=file 自定义样式的方法
- javaweb 项目设置welcome-file-list不生效的解决方法