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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 即墨 中级黑马   /  2016-5-22 23:57  /  4363 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.heima.test;

  2. import java.io.File;
  3. import java.util.Scanner;

  4. public class Test01 {

  5.         /**
  6.          * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小
  7.          * 从键盘接收一个文件夹路径
  8.          *        1.创建文本扫描器对象
  9.          *        2.创建死循环,判断文件路径:创建文件路径对象,接受文本扫描器输入
  10.          *        3.判断文件路径是否存在,不存在提示用户
  11.          *        4.判断文件路径是否是文件夹,是文件夹提示用户
  12.          *        5.如果文件路径是文件夹,跳出循环
  13.          *
  14.          * 统计该文件夹大小
  15.          *        1.获取文件夹下所有文件路径数组。
  16.          *        2.判断你文件数组是否为null,是null提示用户无法访问并返回。
  17.          *        3.遍历文件路径数组下的所有文件路径。
  18.          *        4.如果是文件夹,进入递归调用
  19.          *        5.如果是文件,累加大小
  20.          *        6.返回最后累加的大小
  21.          */

  22.         public static void main(String[] args) {
  23.                 File dir = getDir();
  24.                 System.out.println(getFileLength(dir));
  25.         }
  26.        
  27.         /**
  28.          *
  29.         * @Title: getDir
  30.         * @Description: 获取一个可用的文件夹路径
  31.         * @param @return    设定文件
  32.         * @return File    返回类型
  33.         * @throws
  34.          */
  35.         public static File getDir() {
  36.                 //1.创建文本扫描器对象
  37.                 Scanner sc = new Scanner(System.in);
  38.                 //2.创建死循环,判断文件路径:创建文件路径对象,接受文本扫描器输入
  39.                 File dir = null;
  40.                 while (true) {
  41.                         System.out.println("请输入一个文件夹路径:");
  42.                         String line = sc.nextLine();
  43.                         dir = new File(line);
  44.                         if (!dir.exists()) {
  45.                                 System.out.println("文件路径不存在,请重新输入。");
  46.                         } else if (dir.isFile()) {
  47.                                 System.out.println("文件路径是文件,不是文件夹,请重新输入。");
  48.                         } else {
  49.                                 break;
  50.                         }
  51.                 }
  52.                 return dir;
  53.         }
  54.        
  55.         /**
  56.          *
  57.         * @Title: getFileLength
  58.         * @Description: TODO(这里用一句话描述这个方法的作用)
  59.         * @param @param dir
  60.         * @param @return    设定文件
  61.         * @return long    返回类型
  62.         * @throws
  63.         *
  64.         *         1.获取文件夹下所有文件路径数组。
  65.          *        2.判断你文件数组是否为null,是null提示用户无法访问并返回。
  66.          *        3.遍历文件路径数组下的所有文件路径。
  67.          *        4.如果是文件夹,进入递归调用
  68.          *        5.如果是文件,累加大小
  69.          *        6.返回最后累加的大小
  70.          */
  71.         public static long getFileLength(File dir) {
  72.                 //1.获取文件夹下所有文件路径数组。
  73.                 File[] files = dir.listFiles();
  74.                 long length = 0;
  75.                 //2.判断你文件数组是否为null,是null提示用户无法访问并返回。
  76.                 if (files == null) {
  77.                         System.out.println("文件夹路径无法访问。");
  78.                         return 0;
  79.                 }
  80.                 //3.遍历文件路径数组下的所有文件路径。
  81.                 for (File f : files) {
  82.                         if (f.isDirectory()) {
  83.                                 //4.如果是文件夹,进入递归调用
  84.                                 length += getFileLength(f);
  85.                         } else {
  86.                                 //如果是文件,累加大小
  87.                                 length += f.length();
  88.                         }
  89.                 }
  90.                 //6.返回最后累加的大小
  91.                 return length;
  92.         }
  93.        
  94.        
  95. }
复制代码

2 个回复

倒序浏览
加强for里面判断是文件夹重走get方法不就重新定义了length=0吗?为什么还能累加
回复 使用道具 举报
Roman 发表于 2017-5-17 21:03
加强for里面判断是文件夹重走get方法不就重新定义了length=0吗?为什么还能累加 ...

同问。但是结果是正确的...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马