Java File 关于过滤的一个例子,对例子中的isDirectory()有疑问

tonyhit0707 2013-05-29 12:36:45
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()时,能输出有效路径下的所有文件。
...全文
286 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonyhit0707 2013-05-29
  • 打赏
  • 举报
回复
谢谢各位,这个代码感觉问题多多,给的说明也不够多,再研究意义不大了
yktd26 2013-05-29
  • 打赏
  • 举报
回复
我没验证,但是大概应该是因为 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()
跳蚤图 2013-05-29
  • 打赏
  • 举报
回复
确实不明白 accept方法也没用到
tonyhit0707 2013-05-29
  • 打赏
  • 举报
回复
这个代码原本的功能是实现当前路径下的文件过滤,输出.java文件或者文件夹。然后我是想改进一下,使其能输出其他路径里的.java文件或文件夹。结果实现的效果是能输出.java文件,输不出文件夹
失落夏天 2013-05-29
  • 打赏
  • 举报
回复
public boolean accept(File dir, String name) { // 如果文件名以.java结尾,或者文件对应一个路径,返回true return name.endsWith(".java") || new File(name).isDirectory();//对这个语句有疑问 } } 这个方法真的不明白为什么这么写? 传入的dir是什么?甚至没有用到 name指的是路径的话是对的,如果是文件名的话那么new File(name)这个不对 这个方法是想判断如果java结尾或者是文件夹就返回true。 楼主还是把想实现的功能说一下吧,感觉应该实现这功能不难,但不知道你想实现啥。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧