• 5.6Java File对象使用递归打印子孙级目录以及文件的名称


    5.6Java File对象使用递归打印子孙级目录以及文件的名称

    File对象使用递归打印子孙级目录

    package ioStudy;

    import java.io.File;

    /**
    * 递归--->方法自己调用自己
    * 目标:
    * 打印子孙级目录
    * 打印文件名称
    * @author Lucifer
    */
    public class TestDirDemo3 {
       public static void main(String[] args) {
           /*主方法*/
           File src = new File("D:/workspace/practice/main/java/collection");
           //调用方法
           printName(src,0);
      }

       /*调用方法,打印子孙级目录和文件的名称*/
       public static void printName(File src, int deep){
           //为了彰显层次感加循环输出
           for (int i = 0; i < deep; i++){
               System.out.print("-");
          }

           //直接打印名称--->自己调用自己
           System.out.println(src.getName());
           //判断执行什么操作---文件、文件夹
           if (null == src || !src.exists()){
               /*递归头*/
               //什么都不做,直接返回
               return;
          }else if (src.isDirectory()){
               //拿出下一级
               for (File f : src.listFiles()){
                   //打印出名字
                   /*递归体*/
                   printName(f,deep + 1); //这样比较没有层次感,加形参
              }
          }
      }
    }
    /*
    步骤:
    1.传一个路径
    2.打印名称
    3.判断是否有下一级
       有继续打印
       没有直接返回结束方法
    */

    File对象打印文件夹的大小---封装方法

    DirCount类:

    package ioStudy;

    import java.io.File;

    /**
    * 使用面向对象的方法
    * 统计文件夹的大小
    * ---将方法进行封装处理
    * @author Lucifer
    */
    public class DirCount {

       /*定义属性*/
       //大小
       private long len;
       //文件夹路径
       private String path;
       //查看文件个数
       private int fileSize;
       //文件夹的个数--->目录个数
       private int dirSize = -1;
       //源数据--->根据路径构造File对象
       private File src;

       /*构造器*/
       public DirCount(String path) {
           this.path = path;
           this.src = new File(path); //构件
           count(this.src);
      }

       //生成一个getLen的方法
       public long getLen() {
           return len;
      }

       //生成属性相应的get方法
       public int getFileSize() {
           return fileSize;
      }

       public int getDirSize() {
           return dirSize;
      }

       /*统计大小处理 ---新写方法*/
       private void count(File src){
           //获取大小
           if (null != src && src.exists()){
               if (src.isFile()){
                   //获得大小
                   len += src.length();
                   //如果是文件,fileSize自增
                   this.fileSize++;
              }else {
                   //如果不是文件则fileDir++
                   this.dirSize++;
                   //子孙级--->循环打印
                   for (File f : src.listFiles()){
                       count(f);
                  }
              }
          }
      }
       /*
       1.如果是文件则直接获得大小
       2.如果是文件夹则通过子孙级获得大小
        */
    }

    Test方法:

    package ioStudy;

    public class TestDirCount {

       //主方法
       public static void main(String[] args) {
           /*实例化对象*/
           DirCount dir = new DirCount("D:/workspace/practice/main/java/collection");
           /*对src统计大小*/
           System.out.println(dir.getLen() + "--->" + dir.getFileSize() + "--->" + dir.getDirSize()); //显示13个文件夹是因为包含了自身

           /*实例化对象*/
           DirCount dir2 = new DirCount("D:/workspace/practice/main/java/collection/map");
           /*对src统计大小*/
           System.out.println(dir2.getLen()  + dir2.getFileSize() + "--->" + dir2.getDirSize()); //同样是包含了自身
      }
    }

    小结:

    1. 如何创建文件夹--->mkdir和mkdirs两种方法

    2. 统计下级File,使用listFile方法结合之前的递归方法可以实现

    3.  

    It's a lonely road!!!
  • 相关阅读:
    Trying to access array offset on value of type null
    关于git的功能使用介绍
    魔法方法简介
    Celery介绍,基于django框架,场景例如短信发送。
    ksql 使用
    VSCode 运行 java project
    mongoclusterdocker
    Kafka 学习资料
    [转载] Kafka Rest Api的使用
    Windows 上连接虚拟机上docker的kafka报错unknown host
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14736474.html
Copyright © 2020-2023  润新知