您的位置:首页 > 编程语言 > Java开发

Thinking in Java(10)-Java IO

2017-01-17 12:25 417 查看
1.一个目录列表器的实现

package interfaces.classprocessor;
import java.io.*;
public class DirList {

public static void main(String[] args) {
// TODO Auto-generated method stub
try{
File path = new File("C:/Docs/Java8 API/docs/api/java/io");
String[] list = null;
if (args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(list[0]));
for (int i = 0;i < list.length;i++)
System.out.println(list[i]);
}
catch(Exception e) {
e.printStackTrace();
}
}
}

class DirFilter implements FilenameFilter {
String afn;
DirFilter(String afn){
this.afn = afn;
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
String f = new File(name).getName();
return f.indexOf(afn) != -1;
}

}


这个小例子中使用了回调机制,list()回调了accept()方法。不是很理解回调的话,看完这篇文章就理解了:一个经典例子让你彻彻底底理解java回调机制.

用匿名内部类重写目录列表器:

package interfaces.classprocessor;
import java.io.*;
public class DirList2 {
public static FilenameFilter filter(final String afn) {
return new FilenameFilter() {
String fn = afn;
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
String f = new File(name).getName();
return f.indexOf(fn) != -1;
}

};
}

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File path = new File("C:/Docs/Java8 API/docs/api/java/io");
String[] list;
if (args.length == 0)
list = path.list();
else
list = path.list(filter(args[0]));
for (int i = 0;i < list.length;i++)
System.out.println(list[i]);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}


甚至可以把匿名内部类写成list的一个参数:

package interfaces.classprocessor;
import java.io.*;
public class DirList3 {

public static void main(final String[] args) {
// TODO Auto-generated method stub
try {
File path = new File("C:/Docs/Java8 API/docs/api/java/io");
String[] list;
if (args.length == 0)
list = path.list();
else
list = path.list(
new FilenameFilter() {
public boolean accept(File dir,String name)
{
String f = new File(name).getName();
return f.indexOf(args[0]) != -1;

}
}
);
for(int i = 0;i < list.length;i++)
System.out.println(list[i]);
}
catch (Exception e)
{
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: