A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨道红 中级黑马   /  2014-1-7 15:22  /  1307 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨道红 于 2014-1-7 19:42 编辑
  1. import java.io.File;
  2. /*
  3. * 统计一个目录下所有的文件个数
  4. */
  5. public class FileListTest {
  6.         public static void main(String[] args) {
  7.                 File file = new File("F:\\学习\\JAVA视频");
  8.                 int len = 0;
  9.                 listSize(file,len);
  10.         }
  11.         public static void listSize(File file,int len){
  12.                 File[] f1 =file.listFiles();
  13.                 for(int x = 0; x<f1.length; x++){
  14.                         if(f1[x].isDirectory()){
  15. //                                System.out.println(len);
  16.                                 listSize(f1[x],len);
  17.                         }else{
  18.                                 System.out.println(f1[x]);
  19.                                 len++;
  20.                         }
  21.                 }
  22.                 System.out.println(len);
  23.         }
  24. }
复制代码
为什么len的值没有传进去,每次都是0开始递加?怎么修改?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
建议先判断是不是文件,文件遍历完len值才为文件夹中所有文件数,再递归遍历子文件夹
回复 使用道具 举报
  • import java.io.File;
  • /*
  • * 统计一个目录下所有的文件个数
  • */
  • public class FileListTest {
  •         public static void main(String[] args) {
  •                 File file = new File("F:\\学习\\JAVA视频");
  •                 int len = 0;//把这个删除了
  •                 listSize(file,len);
  •         }
  •         public static void listSize(File file,int len){//为什么要从main函数传len值应该在这个方法的代码块下直接声明
                      int len=0;//这样就对了
  •                 File[] f1 =file.listFiles();
  •                 for(int x = 0; x<f1.length; x++){
  •                         if(f1[x].isDirectory()){
  • //                                System.out.println(len);
  •                                 listSize(f1[x],len);
  •                         }else{
  •                                 System.out.println(f1[x]);
  •                                 len++;
  •                         }
  •                 }
  •                 System.out.println(len);
  •         }
  • }

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
零敢 发表于 2014-1-7 17:27
  • import java.io.File;
  • /*
  • * 统计一个目录下所有的文件个数

  • 你这样该我看不懂,首先把main中的int len 删掉,那么listSize中传的值为多少?
    其次,我方法里面有了一个len,你在里面又定义了一个len,不是重名吗?
    回复 使用道具 举报
    通过调试可知这段代码是正确的!len的初始值为0在调用listSize(File file,int len)方法时,首先是获取传入的对象file中的所有文件,通过for循环进行判断每个对象是目录还是文件,如果是目录则进行在次调用,如果是文件则len的值自动加1,对于递归调用可以看如下代码:

    计算1+2+3+4+5的值


    public class Count {

            /**
             * @param args
             */
            public static void main(String[] args) {
                    // TODO 自动生成的方法存根
                    int sum=count(5);
                    System.out.println(sum);

            }
        public static int count(int key){
                 
                if(key==1)
                        return 1;
                return count(key-1)+key;
        }
    }




    求技术分

    评分

    参与人数 1技术分 +1 收起 理由
    田磊阳 + 1

    查看全部评分

    回复 使用道具 举报
    {:soso_e101:}{:soso_e101:}{:soso_e101:}{:soso_e101:}{:soso_e101:}{:soso_e101:}
    回复 使用道具 举报
    大牛呢?
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马