java初学者,正在学习File类,运行书上的程序,出现了问题

kalelu 2018-09-04 04:25:51
package example.fileDemo;

import java.io.*;
import java.util.*;


public class fileDemo {

public void readFileList(File file,Filter filter)
{
if(file.isDirectory())
{
try {
File[] files = file.listFiles(filter);
ArrayList<File> fileList = new ArrayList<File>();
for(int a = 0;a<files.length;a++)
{
if(files[a].isDirectory())
{
System.out.println("["+files[a].getPath()+"]");
readFileList(files[a],filter);
}else {
fileList.add(files[a]);
}
}
for(File f:fileList)
{
readFileList(f, filter);
}
System.out.println();
}
catch(ArrayIndexOutOfBoundsException e)
{
e.printStackTrace();
}
}else if(file.isFile())
{
FileDesc(file);
}
}

public void FileDesc(File file)
{
if(file.isFile()) {
System.out.println(file.toString()+"\n该文件");
System.out.println(file.canRead()?"可读":"不可读");
System.out.println(file.canWrite()?"可写":"不可写");
System.out.println(file.length()+"字节");
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
String fileName = args[0];
File file = new File(fileName);
Filter filter = new Filter("java");
new fileDemo().readFileList(file,filter);
}

}


class Filter implements FilenameFilter{
String extent;
Filter(String extent)
{
this.extent = extent;
}
public boolean accept(File dir,String name)
{
return name.endsWith("."+extent);
}
}

参数设置为D盘中的一个文件夹,

点击运行之后,控制台没有输出,我进行了单步运行,发现在程序从上往下数第一个for循环处未执行循环,直接跳出了,不知道原因是什么,求大神指点
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Surrin1999 2018-09-05
  • 打赏
  • 举报
回复
引用 3 楼 Leslie_Lu的回复:
[quote=引用 2 楼 Surrin1999的回复:]把return name.endsWith("."+extent);改成 return new File(dir,name).isFile() && name.endsWith(extent);
大概就是这么个意思,我已经解决了,不过看你辛苦回答的份上,我还是把分给你算了,不过这个怎么给分啊,没用过[/quote] 按结贴分配分数就好了
kalelu 2018-09-05
  • 打赏
  • 举报
回复
引用 5 楼 Surrin1999 的回复:
[quote=引用 3 楼 Leslie_Lu的回复:][quote=引用 2 楼 Surrin1999的回复:]把return name.endsWith("."+extent);改成 return new File(dir,name).isFile() && name.endsWith(extent);

大概就是这么个意思,我已经解决了,不过看你辛苦回答的份上,我还是把分给你算了,不过这个怎么给分啊,没用过[/quote]
按结贴分配分数就好了[/quote]
嗯嗯,多谢指点
kalelu 2018-09-04
  • 打赏
  • 举报
回复
引用 2 楼 Surrin1999的回复:
把return name.endsWith("."+extent);改成 return new File(dir,name).isFile() && name.endsWith(extent);
大概就是这么个意思,我已经解决了,不过看你辛苦回答的份上,我还是把分给你算了,不过这个怎么给分啊,没用过
Surrin1999 2018-09-04
  • 打赏
  • 举报
回复
把return name.endsWith("."+extent);改成 return new File(dir,name).isFile() && name.endsWith(extent);
阳光越来越暖 2018-09-04
  • 打赏
  • 举报
回复
for 循环不执行 多半是 length=0

62,614

社区成员

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

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