Java统计目录文件下行数的总和,注释行数的总和,空行数总和详解编程语言

Java统计目录文件下代码行数的总和,注释行数的总和,空行数总和

思路:首先要用递归遍历所有文件夹下的文件,然后记录统计出每一个文件的行数,注释行数,空行数。

package com.sina; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
 
/** 
 * 要求如下: 
 * 统计目录中所有非二进制文件的行数的总和,注释行数总和,空行数总和 
 * @author blog.ytso.com 
 */ 
 
public class CodeLineCount { 
 
    static int constant[] = new int[3];   // 定义常量数组 分别保存【行数,注释,空行】的总和 
 
    public static void main(String[] args) { 
        File f = new File("D:/tomcat/webapps"); 
        print(f); 
 
        System.out.println("*********目录下所有行数总和,注释行数总和,空行行数总和如下:************"); 
        System.out.print("总行数:" + constant[0] + "," + ",注释:" + constant[1] + ",空行:" + constant[2]); 
    } 
 
    /** 
     * 遍历文件夹 
     */ 
    public static void print(File f) { 
        File[] file = f.listFiles(); 
 
        for (int i = 0; i < file.length; i++) { 
            if (file[i].isDirectory()) { // 判断是否文件夹 
                print(file[i]); 
            } else { 
                File readfile = new File(file[i].getAbsolutePath()); 
                statistic(readfile); //开始统计 
            } 
        } 
    } 
 
    /** 
     * 统计文件的总行数,注释行数,空格行数 
     *  
     * @param file 
     * @return 返回所有文件的行数总和 
     */ 
    private static synchronized int[] statistic(File file) { 
 
        int totalCount = 0; // 总行数 
        int notesCount = 0; // 注释 
        int spaceCount = 0; // 空格 
 
        boolean flagNode = false; 
 
        String regxNodeBegin = "//s*///*.*"; // 注释正则 
        String regxNodeEnd = ".*//*///s*"; 
        String regx = "//.*"; 
        String regxSpace = "//s*"; 
 
        BufferedReader br = null; 
        try { 
 
            String line = null; 
            br = new BufferedReader(new FileReader(file)); 
            while ((line = br.readLine()) != null) { 
                totalCount++; 
                if (line.matches(regxNodeBegin) && line.matches(regxNodeEnd)) { 
                    ++notesCount; 
                } 
                if (line.matches(regxNodeBegin)) { 
                    ++notesCount; 
                    flagNode = true; 
                } else if (line.matches(regxNodeEnd)) { 
                    ++notesCount; 
                    flagNode = false; 
                } else if (line.matches(regxSpace)) { 
                    ++spaceCount; 
                } else if (line.matches(regx)){ 
                    ++notesCount; 
                } else if (flagNode){ 
                    ++notesCount; 
                } 
 
            } 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
        //每读入一个文件后将数据保存到常量数组中 
        constant[0] += totalCount;  
        constant[1] += notesCount; 
        constant[2] += spaceCount; 
 
        System.out.println("总行数:" + totalCount + ", 注释:" + notesCount + ", 空行: " + spaceCount + 
                        ", 文件:" + file.getName()); 
 
        return constant; 
 
    } 
} 

输出结果:

总行数:575, 注释:0, 空行: 14, 文件:fuelConsumptionFill.jsp 
总行数:24, 注释:6, 空行: 6, 文件:CodeLineCount.java 
总行数:26, 注释:0, 空行: 3, 文件:head.jsp 
总行数:26, 注释:0, 空行: 3, 文件:index.jsp 
总行数:16, 注释:0, 空行: 4, 文件:web.xml 
*********目录下所有行数总和,注释行数总和,空行行数总和如下:************ 
总行数:667,,注释:6,空行:30

总结:当时写的时候不是很满意,回来查漏补缺,完善一下

作者:blog.ytso.com

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/14276.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论