package cn.wzt;
import java.io.*;
import java.util.Scanner;
public class Ex4 {
public static int wenjian=0;
public static int zonghang=0;
public static int konghang=0;
public static int zhushi=0;
public static void main(String[] args){
//F:\ideaxm\app2022\08io\src\main\java\cn\wzt\Ex4.java
System.out.print("请输入地址:");
Scanner scanner = new Scanner(System.in);
select(scanner.next());
System.out.printf("共有%d个java文件,总行%d行,空行%d行,注释行%d行", wenjian,zonghang,konghang,zhushi);
}
public static void select(String file){
select(new File(file));
}
/**
* @Description: 递归遍历文件
* @Param: [file]
* @return: void
* @Author: wzt
* @Date: 2022/1/21 17:04
*/
public static void select(File file){
if (file.isDirectory()){
for (File t : file.listFiles()) {
if(t.isDirectory()){
select(t);
}else {
panduan(t);
}
}
}else {
panduan(file);
}
}
/**
* @Description: 判断记录行号
* @Param: [file]
* @return: void
* @Author: wzt
* @Date: 2022/1/21 17:10
*/
public static void panduan(File file) {
try (var bu = new BufferedReader(new FileReader(file))){
if (file.isFile()&&file.getName().endsWith(".java")){
//java文件数
++wenjian;
//总行
zonghang+=bu.lines().count();
//空行
BufferedReader bu2 = new BufferedReader(new FileReader(file));
//lines()返回一个 Stream,其元素是从此 BufferedReader 读取的行
//filter()返回由与给定谓词匹配的此流的元素组成的流
//trim()返回一个字符串,其值为该字符串,删除了所有前导和尾随空格,其中空格定义为代码点小于或等于“U+0020”(空格字符)的任何字符
//count()返回此流中元素的计数。这是归约的一种特殊情况,相当于: return mapToLong(e -> 1L).sum();这是终端操作
konghang+=bu2.lines().filter(e->e.trim().length()==0).count();
//注释行
BufferedReader bu3 = new BufferedReader(new FileReader(file));
//"/\\*|\\*|//"表示/*或*或//
zhushi+=bu3.lines().filter(e->e.trim().matches("((/\\*|\\*|//).*|.*//[a-zA-Z_0-9\\u4e00-\\u9fa5\\s]*$)")).count();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
统计文件下的java文件的个数、代码行数、空行数、注释行数。用到了BufferedReader、FileReader、递归和正则表达式
于 2022-02-15 20:02:42 首次发布