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

Java File 关于过滤的一个例子,对例子中的isDirectory()有疑问
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()时,能输出有效路径下的所有文件。

------解决方案--------------------
public boolean accept(File dir, String name)
{
// 如果文件名以.java结尾,或者文件对应一个路径,返回true
return name.endsWith(".java")

------解决方案--------------------
 new File(name).isDirectory();//对这个语句有疑问

}
}
这个方法真的不明白为什么这么写?
传入的dir是什么?甚至没有用到
name指的是路径的话是对的,如果是文件名的话那么new File(name)这个不对
这个方法是想判断如果java结尾或者是文件夹就返回true。
楼主还是把想实现的功能说一下吧,感觉应该实现这功能不难,但不知道你想实现啥。
------解决方案--------------------
我没验证,但是大概应该是因为
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()