`
l514941630
  • 浏览: 47086 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

FilenameFilter的几种基本用法

 
阅读更多
现在假设我们想观看一个目录列表。可用两种方式列出File对象。若在不含自变量(参数)的情况下调用list(),会获得File对象包含的一个完整列表。然而,若想对这个列表进行某些限制,就需要使用一个“目录过滤器”,该类的作用是指出应如何选择File对象来完成显示。
下面是用于这个例子的几段代码:
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\\images");  
          String[] images = directory.list(new ImageFilter());  
          System.out.println("size="+images.length);  
         for (int i = 0; i < images.length; i++){  
               String imgfile=images[i];  
               System.out.println("imgfile="+imgfile);  
          }  
      }  
}
下例用一个匿名内部类(已在第7章讲述)来重写显得非常理想。首先创建了一个filter()方法,它返回指向FilenameFilter的一个句柄:
package IO;
import java.io.File;
import java.io.FilenameFilter;
public class ImageFilterTestInner {
public static FilenameFilter filter(final String afn){
  return new 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 static void main(String[] args){  
        File directory=new File("E:\\program\\FilenameFilter\\images");  
        String[] images = directory.list(new ImageFilter());  
        System.out.println("size="+images.length);  
       for (int i = 0; i < images.length; i++){  
             String imgfile=images[i];  
             System.out.println("imgfile="+imgfile);  
        }  
    }  
}
注意filter()的自变量必须是final。这一点是匿名内部类要求的,使其能使用来自本身作用域以外的一个对象。之所以认为这样做更好,是由于FilenameFilter类现在同ImageFilterTestInner 紧密地结合在一起。然而,我们可采取进一步的操作,将匿名内部类定义成list()的一个参数,使其显得更加精简。如下所示:
package IO;
import java.io.File;
import java.io.FilenameFilter;
public class ImageFilterTestInner1 {
public static void main(String[] args){  
        File directory=new File("E:\\program\\FilenameFilter\\images");  
        String[] images = directory.list(new FilenameFilter(){
         public boolean accept(File dir,String fname){
            return (isGif(fname) || isJpg(fname) || isPng(fname)); 
         }
         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;  
            }  
          }  
        });  
        System.out.println("size="+images.length);  
       for (int i = 0; i < images.length; i++){  
             String imgfile=images[i];  
             System.out.println("imgfile="+imgfile);  
        }  
    }  
}
分享到:
评论

相关推荐

    FilenameFilter的用法

    FilenameFilter接口为Java开发者提供了一种简单而有效的方法来筛选特定目录下的文件。通过自定义实现该接口中的`accept`方法,可以根据不同的需求筛选出符合特定条件的文件列表。这在处理大量文件时尤其有用,可以...

    Java课程设计的图片浏览器的原代码.docx

    2. **查找文件**:使用`FilenameFilter`实现对特定扩展名的文件筛选,这里我们关注.jpg、.JPG、.gif、.GIF、.png、.PNG、.jpeg和.JPEG这几种格式的图片。 3. **加载图片**:创建Image对象,使用`getWidth()`和`...

    java中File类的使用方法

    在文章中提到了几种构造函数的用法: 1. File(String pathname):通过一个路径名字符串创建File实例,例如:"c:\\abc\\1.txt"。 2. File(String parent, String child):通过父目录路径和子目录或文件名创建实例,...

    java精华总结

    线程有几种状态:新建、就绪、运行、阻塞和终止。 ##### 5. 控制线程 可以使用线程提供的方法来控制线程的行为,如start()、stop()、join()等。 ##### 6. 多线程安全问题 多线程环境下,多个线程同时访问共享...

    Java 语言File类的详解

    File类的主要构造函数有以下几种: 1. `File(String path)`:根据给定的路径字符串创建File对象。 2. `File(String parent, String child)`:根据父路径和子路径创建File对象。 **二、文件的创建与删除** - `...

    java初级知识

    可以使用包装类的`toString()`方法或构造函数将基本数据类型转换为`String`。 **4. Object类** `Object`类是所有Java类的根父类,提供了`equals()`, `hashCode()`, `toString()`等方法。 **5. 代码块** 代码块用于...

    查询文件夹下的匹配文件名称

    查询文件夹下的文件名称,主要通过以下几种方式实现: 1. **命令行工具**: - 在Windows系统中,我们可以使用`dir`命令(或`cmd.exe /c dir`)结合通配符(如`*`或`?`)来查找匹配的文件名。例如,`dir *.txt`将列...

    Java File类的常用方法总结

    首先,File类提供了一些构造函数,这些构造函数可以用于创建File对象,它们有如下几种: 1. File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建一个新的File实例。 2. File(String parent, ...

    GetFileByType:根据文件类型从sd卡的指定目录读取文件

    总之,`GetFileByType`项目提供了一种有效的方法,帮助开发者在Android应用中按文件类型筛选和读取SD卡上的文件。通过熟练掌握Java的文件操作和Android的外部存储API,我们可以构建出更加健壮和用户友好的文件管理...

    Java实现的图像查看器完整实例

    Java图像查看器是一种应用程序,它允许用户浏览和操作图像文件。在Java中,我们可以使用AWT(Abstract Window Toolkit)和Swing库来创建这样的程序。本实例中的图像查看器是用Java实现的,主要涉及以下几个关键知识...

    Java第三十五——三十六讲总结-输入输出流.doc

    主要包括以下几类: 1. **字节流**:主要涉及`InputStream`(输入字节流)和`OutputStream`(输出字节流)两大类。 2. **字符流**:主要涉及`Reader`(输入字符流)和`Writer`(输出字符流)两大类。 3. **文件操作...

    Android App中实现图片异步加载的实例分享

    // 使用异步方法加载图片,例如:AsyncTask, Picasso, Glide, Fresco 等 // 加载完成后,通过handler更新UI new AsyncTask, Void, Bitmap&gt;() { @Override protected Bitmap doInBackground(Void... voids) { /...

    java中表示一个文件的File类型详解

    创建`File`对象通常通过构造函数完成,有以下几种方式: 1. `File(String pathname)`:传入一个包含完整路径的字符串,可以是文件或目录。 2. `File(String parent, String child)`:传入父路径字符串和子文件(或...

    java实现文件编码转换的方法

    3. 文件编码转换的方法:我们可以使用 java.io.InputStream 和 java.io.OutputStream 来实现文件编码的转换。我们可以使用 InputStreamReader 和 OutputStreamWriter 来读取和写入文件,并使用 java.nio.charset....

Global site tag (gtag.js) - Google Analytics