Thinking in Java(10)-Java IO,
分享于 点击 21234 次 点评:179
Thinking in Java(10)-Java IO,
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();
}
}
}
相关文章
- 暂无相关文章
用户点评