本文主要是介绍使用FilenameFilter实现图片过滤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1。图片过滤处理文件,只要.gif,.jpg,.png文件//package com.jdon.picture;
import java.io.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
public 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));
}
}
2。程序测试类
import java.io.File;
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);
}
}
}
2 利用正则表达式和FilenameFilter构建文件过滤器
说起正则表达式,即使不熟悉,你也会觉得非常眼熟。没错,现在的文本编辑软件,无论是UltraEdit还是EditPlus,无一不支持正则表达式。可以说,不支持正则表达式的编辑器肯定是三流货色啦。
理论上,正则表达式等价于有限自动机,能够表达相当丰富的语言,DOS中通配符的能力是无法望其项背的。学过编译原理或者计算机理论的朋友一定很熟悉了,可是,如果从头开讲,恐怕这期所有版面都不够。因此这里推荐你参考Sun免费的Java Tutorial中的Regular Expressions一章,写得很详细。即使你熟悉计算机理论的正则表达式,也建议抽空看一看,因为Java采取的是类Perl风格的语法,和理论书上有些出入。
比如我们要过滤出所有Java源程序。众所周知,Java文件名必须以字母、美元符号或者下划线开头,然后可以由数字、字母、美元符号或者下划线的任意组合,最后扩展名是java。用正则表达式写出来,就是“[a-zA-Z_$][a-zA-Z_$0-9]*/.java”(不含引号)。
其中,[a-zA-Z_$]表示小写字母a至z、大写字母A至Z、美元符号或者下划线任取其一;[a-zA-Z_$0-9]*表示小写字母a至z、大写字母A至Z、美元符号、下划线以及0至9这十个数字的任意组合;“/.java”表示Java源程序的扩展名,由于“.”在Java正则表达式中有特殊意义,所以“/.”才表示一个“.”符号。
当然,Java正则表达式API中还有许多扩充,可以简写为:[a-zA-Z_$][/w$]*/.java。
有了这些知识,我们不难写出支持正则表达式的文件过滤器FileFilter,源代码如下:
public class FileFilter implements FilenameFilter {
private Pattern pattern;
public FileFilter(String regex) {
pattern = Pattern.compile(regex);
}
public boolean accept(File dir, String name) {
File file = new File(dir + "// " + name);
return pattern.matcher(file.getName()).matches() && file.isFile();
}
}
Java中通过Pattern类来使用正则表达式。在FileFilter的构造函数中,通过把regex参数传递给Pattern的compile ()方法,便可以得到一个代表这个正则表达式的实例,之后便可以在accept()方法中调用了。具体地,当且仅当文件名满足正则表达式并且这的确是一个文件时,accept()方法返回True。
这篇关于使用FilenameFilter实现图片过滤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!