Java教程

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

本文主要是介绍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.  

这篇关于5.6Java File对象使用递归打印子孙级目录以及文件的名称的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!