对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务。
—-Java编程思想
File(文件)类,既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。下面分析它的应用—-目录列表器。
代码实例一:
package Java_IO;
import java.io.File;
import java.util.Arrays;
/**
* Created by LKL on 2017/2/27.
*/
public class DirList {
public static void main(String[] args){
File path = new File(".");
String[] list;
if (args.length==0){
list=path.list();
}else{
list=path.list(new DirFilter(args[0]));
}
//按字母排序
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
}
}
package Java_IO;
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/**
* Created by LKL on 2017/2/27.
*/
public class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String arg) {
pattern = Pattern.compile(arg);
}
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
}
运行上述代码结果如下:
.idea
out
program.iml
src
看了上述代码就可以知道,获取目录的列表,主要是用了list()这个方法,下面看看它的源码:
public String[] list() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
if (isInvalid()) {
return null;
}
return fs.list(this);
}
list中底层则是用一个栈的方式,获取到文件列表。
创建了DirFilter这个类是为了把accept()方法提供给list()使用,使list()可以回调accept(),进而决定哪些文件包含在列表中。
accept()会使用一个正则表达式的matcher对象,来查看此正则表达式regex是否匹配这个文件的名字。通常使用accept(),list()方法会返回一个数组。
代码实例2:
package Java_IO;
import java.io.File;
import java.util.Arrays;
/**
* Created by LKL on 2017/2/27.
*/
public class DirList {
public static void main(String[] args){
File path = new File(".");
String[] list;
if (args.length==0){
list=path.list();
}else{
list=path.list(new FilenameFilter(){
private Pattern pattern = Pattern.compile(args[0]);
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
});
}
//按字母排序
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem : list){
System.out.println(dirItem);
}
}
}
运行上述代码结果如下:
.idea
out
program.iml
src
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…