日期:2014-05-20  浏览次数:20706 次

文件过滤FilenameFilter
d盘下有.java的文件 但以下代码显示的结果为空,错在哪?

Java code

import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.*;
import java.util.*;


public class DirList {

     public static void main(String[] args) {
            
            String filePath="d:\\";    
            String filterName=".java";    
            FilenameFilter ff = new DirFilter(filterName);    
            File f = new File(filePath);        
            String[] list = f.list(ff);
          
            Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
            for(String dirItem : list){
                System.out.println(dirItem);
            }
     }

     static  class DirFilter implements FilenameFilter{
         
         private Pattern pattern;
         public DirFilter(String regex){
             pattern = Pattern.compile(regex);
         }
         public boolean accept(File dirFile , String name){
             return pattern.matcher(name).matches();
         }
         
     }


}





------解决方案--------------------
你为啥要用正则呢?正则中的 . 是有特殊含义的,表示任何字符。

如果非要用正则,应该是:String filterName="\\.java$";

其实判断里面简单点,直接用 endWiths() 最方便。
------解决方案--------------------
正则表达式的问题。
String filterName=".+?\\.java";
------解决方案--------------------
探讨
".+?\\.java .+\\.java 这些能用 \\.java$ 依然为空
谁解释下 .+\\.java

------解决方案--------------------
不知道LZ是否还要忽略大小写
如果要忽略
String filterName="(?i).+?[.]java";