递归遍历目录

读取目录下有多少文件夹,多少行代码,最后修改时间,以及总行数,总目录

编写一个FileUtil工具类

写一个关于行数的getFileRow()方法

1.创建类和编写方法

2.引流

FileReader reader = new FileReader(file)


 3.实例化StringBuffer对象 

StringBuilder对象代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过append()方法改变这个字符串对象的字符序列,最后通过调用它的toString()方法将其转换为一个String对象。


StringBuilder sbu = new StringBuilder(); 


3. 当在读取的时候进行追加,将指定的字符串追加到此字符序列 

sbu.append();追加

String .format();改变格式
 

  while (reader.ready()) {
                sbu.append(String.format("%c", reader.read()));
            }

 4.最后写出rows行数的表达式,并返回rows

   rows = sbu.toString().lines().count();

5.完整代码

  public static long getFileRow(String file) {
        long rows = 0;
        //字符流
        try (FileReader reader = new FileReader(file)) {
            StringBuilder sbu = new StringBuilder();
            while (reader.ready()) {
                sbu.append(String.format("%c", reader.read()));
            }
            rows = sbu.toString().lines().count();
        } catch (Exception e) {

        }
        return rows;
    }

创建一个静态count()的方法进行调用

定义行数为0, 文件名个数为0; 

 1.list()方法,用于遍历某个指定目录下的所有文件的名称

 File[] files = dir.listFiles();

2.然后进行递归遍历,

先判断是不是目录,如果是返回给count,如果不是,判断是否为文件并获取他的后缀名是Java的文件

并且输出最后一次修改他的时间和文件地址

 if (file.isDirectory()){
                count(file);
            } else if (file.isFile() && file.getName().endsWith("java")) {
                String p=file.getAbsolutePath();//返回抽象路径名的绝对路径名字符串。
                String t=String .format("%tF %<tT",file.lastModified());//输出最后一次的修改时间

3.调用 FileUtil工具类下的getFileRow方法的得到每个目录文件的代码行数以及文件夹不断进行遍历

 rowscount+=FileUtil.getFileRow(p);  //调用FileUtil类里面的方法
                ++filecount;

4.输出

System.out.println(p+"["+FileUtil.getFileRow(p)+"行 时间:"+t+"]");

 在main方法中调用这两个方法进行使用

1获取文件地址

String path =" (地址)";

2.使用count()方法获取这个地址下的文件个数,行数,文件地址以及最后修改时间

  count(new File(path));

3.输出行数.文件个数

 System.out.println(filecount);
        System.out.println(rowscount);

总体代码 :

FileUtil类   getFileRow()方法

/*
 * Copyright (c) 2020, 2023.
 *
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.HashMap;
import java.util.StringJoiner;

/**
 * <p>Project: File - F3</p>
 * <p>Powered by Cyy On 2023-07-20 16:48:20</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class FileUtil {

    public static long getFileRow(String file) {
        long rows = 0;
        //字符流
        try (FileReader reader = new FileReader(file)) {
            StringBuilder sbu = new StringBuilder();
            while (reader.ready()) {
                sbu.append(String.format("%c", reader.read()));
            }
            rows = sbu.toString().lines().count();
        } catch (Exception e) {

        }
        return rows;
    }
}

cout() 以及main()方法输出

/*
 * Copyright (c) 2020, 2023.
 *
 */

import java.io.File;

/**
 * <p>Project: File - Dir2</p>
 * <p>Powered by Cyy On 2023-07-21 08:55:12</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class Dir2 {
    static int filecount=0;
    static int rowscount=0;

    public static void main(String[] args) {
        String path ="D:\\my";
        count(new File(path));
        System.out.println(filecount);
        System.out.println(rowscount);

    }
//计算目录下多少个文件,,和每一个文件行数,最后修改时间,总共我文件数,总共行数
    public static  void count(File dir){
        File[] files = dir.listFiles();
        for (File file:files){
            if (file.isDirectory()){
                count(file);
            } else if (file.isFile() && file.getName().endsWith("java")) {
                String p=file.getAbsolutePath();//返回抽象路径名的绝对路径名字符串。
                String t=String .format("%tF %<tT",file.lastModified());//输出最后一次的修改时间
                rowscount+=FileUtil.getFileRow(p);  //调用FileUtil类里面的方法
                ++filecount;
                System.out.println(p+"["+FileUtil.getFileRow(p)+"行 时间:"+t+"]");

            }
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值