public class FilenameFilterTest
{
public static void main(String[] args) 
{
File file = new File(".");
String[] nameList = file.list(new MyFilenameFilter());
for(String name : nameList)
{
System.out.println(name);
}
}
}
// 实现自己的FilenameFilter实现类
class MyFilenameFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
// 如果文件名以.java结尾,或者文件对应一个路径,返回true
return name.endsWith(".java")
|| new File(name).isDirectory();//对这个语句有疑问 }
}
当我把file的路径改成具体的某个路径时,只能输出“.java”的文件,而把路径设置为当前路径时,可以输出文件夹名称,请问这是为什么?另外当我用dir调用isDirectory()时,能输出有效路径下的所有文件。

解决方案 »

  1.   

    public boolean accept(File dir, String name)
    {
    // 如果文件名以.java结尾,或者文件对应一个路径,返回true
    return name.endsWith(".java")
    || new File(name).isDirectory();//对这个语句有疑问}
    }
    这个方法真的不明白为什么这么写?
    传入的dir是什么?甚至没有用到
    name指的是路径的话是对的,如果是文件名的话那么new File(name)这个不对
    这个方法是想判断如果java结尾或者是文件夹就返回true。
    楼主还是把想实现的功能说一下吧,感觉应该实现这功能不难,但不知道你想实现啥。
      

  2.   

    这个代码原本的功能是实现当前路径下的文件过滤,输出.java文件或者文件夹。然后我是想改进一下,使其能输出其他路径里的.java文件或文件夹。结果实现的效果是能输出.java文件,输不出文件夹
      

  3.   

    确实不明白accept方法也没用到
      

  4.   

    我没验证,但是大概应该是因为
    accept(File dir, String name)
    中的name只是文件名,不是绝对路径,当你把路径设置为当前路径时,由于工作路径是当前的,所以只需要文件或文件夹名字就能让File(name)找到这个文件而.isDirectory()也是成立的
    但当你传入一个其他路径时new出来的file是不存在的可以试试exists(),所以当你测试.isDirectory()也就返回false,解决方法可以试试改成
    getCanonicalPath()|| new File(dir.getCanonicalPath()+System.getProperty("file.separator")+name).isDirectory()