现在假设我们想观看一个目录列表。可用两种方式列出File对象。若在不含自变量(参数)的情况下调用list(),会获得File对象包含的一个完整列表。然而,若想对这个列表进行某些限制,就需要使用一个“目录过滤器”,该类的作用是指出应如何选择File对象来完成显示。
下面是用于这个例子的几段代码:

Java代码 复制代码 收藏代码
  1. package IO;
  2.  
  3. import java.io.File;
  4. import java.io.FilenameFilter;
  5.  
  6. class ImageFilter implements FilenameFilter{
  7.  
  8. public boolean isGif(String file) {
  9. if (file.toLowerCase().endsWith(".gif")){
  10. return true;
  11. }else{
  12. return false;
  13. }
  14. }
  15. public boolean isJpg(String file){
  16. if (file.toLowerCase().endsWith(".jpg")){
  17. return true;
  18. }else{
  19. return false;
  20. }
  21. }
  22.  
  23. public boolean isPng(String file){
  24. if (file.toLowerCase().endsWith(".png")){
  25. return true;
  26. }else{
  27. return false;
  28. }
  29. }
  30. public boolean accept(File dir,String fname){
  31. return (isGif(fname) || isJpg(fname) || isPng(fname));
  32.  
  33. }
  34.  
  35. }
  36. public class ImageFilterTest{
  37. public static void main(String[] args){
  38. File directory=new File("E:\\program\\FilenameFilter\\p_w_picpaths");
  39. String[] p_w_picpaths = directory.list(new ImageFilter());
  40. System.out.println("size="+p_w_picpaths.length);
  41. for (int i = 0; i < p_w_picpaths.length; i++){
  42. String imgfile=p_w_picpaths[i];
  43. System.out.println("imgfile="+imgfile);
  44. }
  45. }
  46. }
package IO;

import java.io.File;
import java.io.FilenameFilter;

class ImageFilter implements FilenameFilter{ 

public boolean isGif(String file) { 
if (file.toLowerCase().endsWith(".gif")){ 
return true; 
}else{ 
return false; 
} 
} 
public boolean isJpg(String file){ 
if (file.toLowerCase().endsWith(".jpg")){ 
return true; 
}else{ 
return false; 
} 
} 

public boolean isPng(String file){ 
if (file.toLowerCase().endsWith(".png")){ 
return true; 
}else{ 
return false; 
} 
} 
public boolean accept(File dir,String fname){ 
return (isGif(fname) || isJpg(fname) || isPng(fname)); 

} 

} 
public class ImageFilterTest{ 
public static void main(String[] args){ 
File directory=new File("E:\\program\\FilenameFilter\\p_w_picpaths"); 
String[] p_w_picpaths = directory.list(new ImageFilter()); 
System.out.println("size="+p_w_picpaths.length); 
for (int i = 0; i < p_w_picpaths.length; i++){ 
String imgfile=p_w_picpaths[i]; 
System.out.println("imgfile="+imgfile); 
} 
} 
}


下例用一个匿名内部类(已在第7章讲述)来重写显得非常理想。首先创建了一个filter()方法,它返回指向FilenameFilter的一个句柄:

Java代码 复制代码 收藏代码
  1. package IO;
  2.  
  3. import java.io.File;
  4. import java.io.FilenameFilter;
  5.  
  6. public class ImageFilterTestInner {
  7. public static FilenameFilter filter(final String afn){
  8. return new FilenameFilter(){
  9. public boolean isGif(String file){
  10. if(file.toLowerCase().endsWith(".gif")){
  11. return true;
  12. }else{
  13. return false;
  14. }
  15. }
  16. public boolean isJpg(String file){
  17. if (file.toLowerCase().endsWith(".jpg")){
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }