Java统计脚本代码行数

把开源 Skills 集成到 LangGraph 项目 1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。 阅读详情

问题场景

项目完结后写软件操作手册时,需要统计一下整个项目有多少有效的代码行数,项目使用Java语言,涉及到前后台的脚本格式有.java、.xml、.jsp三种。

问题分析

一个脚本文件无非由注释语句,空行,和正常代码组成。发现注释语句由特定标签识别,例如Java里用’//’表示单行注释,‘/**/’表示多行注释,xml与jsp文件里用‘’表示注释,可以逐行读取脚本判断是否有这些特定标志与空行,剩下的就是有效代码数目。

CODE

import java.io.*;
import java.util.regex.Pattern;

/**
 * Created on 2017/11/2
 * Author: youxingyang.
 */
public class CountCodeNum {
    /**代码行**/
    private static long normalLines = 0;
    /**注释行**/
    private static long commentLines = 0;
    /**空行**/
    private static long whiteLines = 0;

    private static final String JAVA = "java";
    private static final String XML = "xml";
    private static final String JSP = "jsp";

    private static int length = 3;
    private static Pattern p = Pattern.compile("^[//s&&[^//n]]*$");
    private static String comm = "//";
    private static String javaS = "/*";
    private static String javaE = "*/";
    private static String xmlS = "<!--";
    private static String xmlE = "-->";
    private static String jspS = "<%--";
    private static String jspE = "--%>";

    public static void main(String[] args) throws IOException {
        countFile("D:\\IDEAWORKPLACE");
        System.out.println("空行:" + whiteLines);
        System.out.println("注释行:" + commentLines);
        System.out.println("代码行:" + normalLines);
    }

    /**
     * 找出该路径下的文件代码行数    -支持文件夹
     * @param path  要查找的路径
     */
    private static void countFile(String path) throws IOException {

        File file = new File(path);
        if (file.isFile()) {
            count(file);
        } else {
            File[] childs = file.listFiles();
            if (childs != null) {
                for (File child : childs) {
                    if (!child.isDirectory()) {
                        count(child);
                    } else {
                        countFile(child.getAbsolutePath());
                    }
                }
            }
        }
    }

    /**
     * 选择脚本解析
     * @param file          要解析的文件
     * @throws IOException
     */
    private static void count(File file) throws IOException {
        if (!file.exists()) {
            return;
        }
        String name = file.getName();
        String suffix = name.substring(name.lastIndexOf('.') + 1);
        switch (suffix.toLowerCase()) {
            case JAVA:
                System.out.println(file.getName());
                countCode(file, javaS, javaE, comm);
                break;
            case XML:
                System.out.println(file.getName());
                countCode(file, xmlS, xmlE, comm);
                break;
            case JSP:
                System.out.println(file.getName());
                countCode(file, xmlS, xmlE, comm, jspS, jspE);
                break;
            default:
                System.out.println("无法解析后缀为" + suffix.toLowerCase() + "的文件");
        }
    }

    /**
     * 统计空行、注释行、代码行
     * @param file          文件
     * @param flags         表长参数,判断标志
     * @throws IOException
     */
    private static void countCode(File file, String... flags) throws IOException {
        BufferedReader br = null;
        boolean comment = false;
        boolean comment1 = false;
        if (flags.length < length) {
            return;
        }
        try {
            br = new BufferedReader(new FileReader(file));
            String line = "";
            try {
                while ((line = br.readLine()) != null) {
                    line = line.trim();
                    boolean isComment = line.startsWith(flags[2]) || (line.startsWith(flags[0]) && line.endsWith(flags[1]));
                    if (p.matcher(line).find()) {
                        whiteLines++;
                    } else if (line.startsWith(flags[0]) && !line.endsWith(flags[1])) {
                        commentLines++;
                        comment = true;
                    } else if (comment) {
                        commentLines++;
                        if (line.endsWith(flags[1])) {
                            comment = false;
                        }
                    } else if (isComment) {
                        commentLines++;
                    } else {
                        if (flags.length == 5 && jspE.equals(flags[flags.length - 1])) {
                            if (line.startsWith(flags[3]) && !line.endsWith(flags[4])) {
                                commentLines++;
                                comment1 = true;
                            } else if (comment1) {
                                commentLines++;
                                if (line.endsWith(flags[4])) {
                                    comment1 = false;
                                }
                            } else if (line.startsWith(flags[3]) && line.endsWith(flags[4])) {
                                commentLines++;
                            }
                        }
                        normalLines++;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
RK3588开发笔记-ISP模块参数调试 本文详细介绍了基于RK3588平台的ISP模块参数调试流程。主要内容包括:硬件准备(RK3588板卡、IMX415摄像头等)、软件环境搭建(Ubuntu系统、RKISP_Tuner工具)、IMX415摄像头基础使用验证、RKISP2.x Tuner工具的使用方法(新建/加载IQ参数文件、Sensor配置、Raw图采集)以及最终IQ文件的部署。文章重点强调了基础标定的重要性,建议开发者分场景调试并参考官方文档,通过合理配置ISP参数来优化图像质量。该调试流程适用于RK3588平台的图像采集类项目开发。 阅读详情

相关推荐

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

在进行深度学习算法的环境部署时,由于生产服务器被彻底隔离外网,只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到Windows 服务器,但在运行labelimg等工具时可能报错,因此用conda-pack来解决。

weixin_44115575的博客 1427

Java统计xml文件行数

但是当处理到xml文件时,我发现结果出现了问题,本应有6000多行的文件,统计出来只有42行,和正确结果相比误差大的离谱。使用记事本直接打开xml发现,这个xml文件并没有被格式化,而常规统计文件行数的方法是通过换行符来计算的,所以结果会出现误差,那么想要统计到正确的文件行数,就需要先对文件内容进行格式化。

qq_38736877的博客 665

Apollo MPC横纵向耦合控制学习笔记

Apollo MPC横纵向控制原理学习笔记

weixin_39199083的博客 1万+

统计代码行数

如何在Mac中统计代码行数?下面来提供一个检查几种文件格式的方法:1. 统计XML文件中的代码行数   使用以下命令   find . "(" -name "*.xml" ")" -print | xargs wc -l2. 统计java代码行数   使用以下命令   find . "(" -name "*.java" ")" -print | xargs wc -l3. 统计.m .

a411360945的专栏 757

用Spirent Test Center测试交换机Head of Line(HOL)Blocking

测试目的:设备执行拥塞控制,使非阻塞端口不受阻塞端口影响 预设条件:在RFC2889里按以下步骤设置,端口1和端口3同时向端口4发送数据包,端口1向端口2发送数据包 测试步骤:运行设置好的RFC2889 测试结果:所有frame size都显示没有Head of Line(HOL),即非阻塞端口不受阻塞端口所影响 ...

Yuna_的博客 1358

Anaconda离线创建python环境

既然是离线创建python环境,就需要有一个已经创建好的python环境。所以我们有两台win10的机器,分别是A和B。两台机器都安装了anaconda。其中A可以连网,因此我们在A上创建好一个python2.7的环境py27,然后将py27移植(安装)到B上。B连不连网都无所谓。 一、机器上A上创建python2.7的环境py27 有两种方法: 方法1:使用Anaconda的图形界面。首先,点击Environments->Create,然后输入要创建的环境名称"py27",然后选择2.7,如图

FY_2018的博客 6787

java统计代码的行数

java统计代码的行数。

m0_57119230的博客 3904

驾驶行为检测数据集准备与处理详解

本文详细介绍了构建"未系安全带/打电话"检测模型的数据集准备流程。首先分析公开数据集(如StateFarm、AICityChallenge)的优缺点,并提供格式转换脚本。重点推荐自行采集+半自动标注方案:1)视频关键帧提取;2)使用预训练模型生成伪标签;3)人工修正标注;4)数据增强(光照变化、运动模糊等)。文章还包含数据配置文件编写指南,并针对类别不平衡、小目标检测等常见问题提出解决方案,如过采样、切片训练和负样本挖掘。通过这套流程可构建高质量数据集,为模型训练奠定基础。

u010117029的博客 356

写一个Java程序来统计项目的代码行数

写一个Java程序来统计项目的代码行数

小何的博客 1843

【AI技术赋能有限元分析应用实践】Abaqus有限元分析与深度学习结合20个案例与有限元分析数据来源方法说明

结合 Abaqus 和深度学习,数据的获取和处理是关键的一步。通过从仿真、实验、公开数据库或合成数据中获取数据,经过预处理后,可以将其用于训练深度学习模型。最终,将训练好的深度学习模型与 Abaqus 集成,用于材料行为预测、结构优化、非线性分析、损伤预测等任务,从而提升仿真效率和精度。

源代码杀手的博客 3213

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?这是一个让许多开发者都感到困扰的问题。本文将介绍如何使用FPGA设计和实现...

【使用FPGA实现MIPI DSI接口】——如何使用FPGA实现MIPI DSI接口?MIPI DSI(移动产业处理器接口 - 显示串行接口)是一种用于在移动设备中传输视频数据的标准接口,它是目前大部分智能手机和平板电脑所采用的显示接口。首先,我们需要实现MIPI DSI的物理层接口。在实现MIPI DSI接口后,我们还需要编写驱动程序来控制MIPI DSI显示屏显示图像。这里只是提供了MIPI DSI接口的物理层代码示例,完整的MIPI DSI接口实现需要包括控制器和驱动程序等更多内容。

uote_e的博客 2001

统计java代码行数_统计项目代码行数

今天测试告知需要项目的代码行数,项目怎么也有十万左右的代码行数,想想就想奔溃了,Eclipse一定有这方面的统计,应该也有统计工具,于是上网查了一番,果然找到了。1、我要查询的文件类型为*.xml、*.tld、*.java、*.properties、*.mxml、*.as;2、统计不包括注释行与空白行。统计方法一:使用Eclipse里面的统计工具在Eclipse中选中项目,再打开Search-&...

weixin_42347671的博客 1914

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 297

一行脚本快速统计Java项目代码行数

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33947521的博客 2834

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

统计Java代码行数脚本

定位到要统计哪个目录下的代码行数,然后执行如下代码: find . -name "*.c"|xargs cat|grep -v ^$|wc -l

ACGkaka的博客 485

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux统计JAVA源代码行数_统计代码行数的实用脚本

每次快到年底的时候各种的审计工作都在进行中,而最近应为部门需要统计个人写的代码有多少为此,为了方便统计就写了一个脚本用于统计代码的行数,脚本如下:#!/bin/bash#count.sh#Use Count the number of lines of code#writer jim#history#2017.02.06if [ $# -lt 1 ];thenecho "please enter ...

weixin_32481609的博客 197

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【统计每天开发的代码行数】Java脚本结合Git工具⭐️实现每天提交代码量的统计

哎!有了,搞一个可以统计每天开发代码行数的脚本给你! 2024/1/19---已更新封装为可直接引用的jar包

产品经理克星(狗头) 2890

一行脚本快速统计项目java代码行数

1.统计每个文件的行数 find . -name *.java -exec wc -l {} \; 2.统计代码总行数 find . -name *.java -exec wc -l {} \; | awk '{s+=$1}END{print s}' 3.分析 整个脚本分为三部分: 查找当前目录下所有以java结尾的文件 通过wc 统计单个的java文件行数 通过awk命令进行求和得到总的文件行数 ps:如果想统计其语言的项目,只需要把*.java后缀替换成*.go、*.js即可

不积跬步,无以至千里;不积小流,无以成江海。 462

利用shell脚本统计代码行数

刚毕业那会儿有一次去一家台湾公司面试,问我写过多少行代码。从没想过这个问题,粗略算了算,随口说道:大概几十万行吧。最近整理资料,看着eclipse左边满满的列表,想起了这个事。倒底总共有多少行代码?——这事如果在windows下要么找工具,要么编程序。又想到linux里的命令统计很方便,于是打算用个命令来完成。可分析来分析去,恐怕一行命令是搞不定的——又涉及递归查找,又涉及指定文件类型,又涉及对文...

Alex 903

shell统计文件夹代码行数

最粗略版 Shell代码   find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'   find . -name "*.java"|xargs cat|wc -l    #Output:37634   上面的两句效果一样,只不过第二种是先利用cat将多个java文件的内容合并输出了

stay hungry,stay foolish 1348

python计算营业额代码_使用PYTHON统计项目代码行数

注:原创不易,转载请务必注明原作者和出处,感谢支持!一 使用PYTHON统计项目代码行数遇到一个非常小的需求:统计一个项目里头的各类源代码共有多少行。像这种小需求,一个简单的shell脚本就能够完成的。但是我不会shell ヾ(。 ̄□ ̄)ツ゜゜゜。于是求助python,经过一段时间后,写了一个简单的Python脚本如下。# code_analyst.py#!/usr/bin/env python3...

weixin_39547158的博客 381

采用shell脚本统计代码的行数

刚毕业那会儿有一次去台湾公司面试,我问多行代码怎么写。我从来没有想过这个问题,粗略计算,。惊叹:大概几十万行不行。最近整理资料,看着eclipse左边全面上市,我觉得这个东西。代码共同拥有的行倒底总数?——windows下要么找工具。要么编程序。又想到linux里的命令统计非常方便,于是打算用个命令来完毕。可分析来分析去,恐怕一行命令是搞不定的——又涉及递归查找,又涉及指定...

weixin_30455067的博客 75

Python统计Java代码行数

一些公司,在提交代码时,都会有一些检查代码的工具。今天,主要介绍一下如何使用python来统计项目中的代码行数。因为本人主要还是使用Java进行开发,Python水平还在初级阶段。因此,我先从最简单的脚本写起。相信大家都用过一些工具统计自己项目中的代码量,今天,我将介绍一下如何使用Python脚本统计AndroidStudio中Java代码的行数。 # -*- coding:utf-8 -*- import os import time # 获取当前项目目录 projectDir = o...

zhaojun的博客 1万+

java 快速导出源代码工具 申请软件著作权

可以直接用脚本实现。而且可以快速统计代码行数,下面用shell脚本实现一下。 #!/bin/bash list_alldir(){ for file2 in ls -A $1 do if [ -d “1/1/1/file2” ];then #echo “1/1/1/file2” list_alldir “1/1/1/file2” elif [ -f “1/1/1/file2” ];then if...

程序猿小白菜 3万+

一句shell命令搞定代码行数统计

最粗略版 Shell代码 find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}' find . -name "*.java"|xargs cat|wc -l #Output:37634 上面的两句效果一样,只不过第二种是先利用cat将多个java文件的内容合并输出了。然后再统计。 不过两个都有共同的毛病

yiluoAK_47的专栏 2752

统计代码行数的shell脚本

#!/bin/sh check_name() {     case $1 in         *.h | *.c | *.cpp | *.c++) return 0;;         *.java) return 0;;         *.py) retur

aamdaamd的专栏 501
上一篇: 文件工具类的实用方法记录
下一篇: web: _show -> _info 造轮子编程
sand_clock
博客等级 码龄11年 66粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值