d盘下有.java的文件 但以下代码显示的结果为空,错在哪?
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();
 }
 
 }
}

解决方案 »

  1.   

    你为啥要用正则呢?正则中的 . 是有特殊含义的,表示任何字符。如果非要用正则,应该是:String filterName="\\.java$";其实判断里面简单点,直接用 endWiths() 最方便。
      

  2.   

    正则表达式的问题。
    String filterName=".+?\\.java";    
      

  3.   

    ".+?\\.java   .+\\.java 这些能用   \\.java$ 依然为空
    谁解释下 .+\\.java 
      

  4.   

    .代表任意字符 --A
    +代表出现一次以上
    \\.就是对--A的点进行转义,表示点字符
    java就是java了
      

  5.   

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

  6.   


    String filterName="\\.java$";  要用:
    return pattern.matcher(name).find();