文档章节

获取当前项目所有java文件的总行数,代码行数,注释行数,空白行数

程序员Joe
 程序员Joe
发布于 2014/06/17 14:40
字数 398
阅读 30
收藏 0
点赞 0
评论 0
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @author Administrator
 *
 */
public class JavaCode {
    private static final String PROJECT_DIR = "C:\\test";
    private static int totle = 0;        //总行数                
    private static int source  = 0;        //代码行数            
    private static int blank  = 0;        //空白行数                
    private static int comments = 0;    //注释行数
    
    /**
     * 读取文件夹内java文件
     * @param dir
     */
    private static void listNext(File dir) {
        File[] files = dir.listFiles();
        for (int i = 0; i < files.length; i++) {
            //判断是否是文件夹,如果是文件夹继续向下检索
            if (files[i].isDirectory()) {
                listNext(files[i]);
            } else {
                try {
                    if (files[i].getName().endsWith(".java")) {
                        System.out.println(files[i].getAbsolutePath());
                        javaLine(files[i]);
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 读取java文件总行数,代码行数,空白行数,注释行数
     * @param f
     * @throws IOException 
     * @throws FileNotFoundException 
     */
    private static void javaLine(File f) throws FileNotFoundException, IOException{
        String strLine = "";
        String str = fromFile(f);
        if (str.length() > 0) {
            while (str.indexOf('\n') != -1) {
                totle++;
                //System.out.println(totle);
                strLine = str.substring(0, str.indexOf('\n')).trim();
                //str = str.substring(str.indexOf('\n') + 1, str.length());
                if (strLine.length() == 0 ) {
                    blank++;
                }else if (strLine.charAt(0) == '*' || strLine.charAt(0) == '/') {
                    comments++;
                }else{
                    source++;
                    String regEx = "^*//";
                    if(regEx(strLine,regEx)){
                        comments++;
                    }
                }
                str = str.substring(str.indexOf('\n') + 1, str.length());
            }
        }    
    }
    
    /**
     * 将java文件以字符数组形式读取
     * @param f
     * @return
     * @throws FileNotFoundException
     * @throws IOException
     */
    private static String  fromFile(File f) throws FileNotFoundException,IOException {
        FileInputStream fis = new FileInputStream(f);
        byte[] b = new byte[(int) f.length()];
        fis.read(b);
        fis.close();
        return new String(b);
    }
    
    /**
     * 正则匹配
     * @param str 输入字符串
     * @param regEx 正则匹配字符串
     * @return
     */
    private static boolean regEx(String str,String regEx){
        Pattern p=Pattern.compile(regEx);
        Matcher m=p.matcher(str);
        boolean result=m.find();
        return result;
    }
    public static void main(String[] args) throws FileNotFoundException, IOException {
        //File root = new File(PROJECT_DIR);
        File directory = new File("");//参数为空 
        //获取项目路径
        String projectFile = directory.getCanonicalPath() ;
        System.out.println(projectFile+"===============");
        listNext(new File(projectFile));
        System.out.println(totle+1);
        System.out.println(source);
        System.out.println(blank);
        System.out.println(comments);
    }


}

好东西,记录一下,转帖

© 著作权归作者所有

共有 人打赏支持
程序员Joe
粉丝 10
博文 11
码字总数 3963
作品 0
常州
程序员
主流Java数据库连接池比较及前瞻

本文转载自微信公众号「工匠小猪猪的技术世界」 主流数据库连接池 常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JND...

渣渣(Charles) ⋅ 04/30 ⋅ 0

iOS 统计Xcode项目代码行数

打开终端 cd 到项目文件,例如: 回车来到项目目录下 运行下面指令 101.png 回车,执行--这条指令是获取每个文件内的代码行数,并在最后统计出一共的代码行数【注释也统计在代码量之内】 10...

展菲 ⋅ 2017/11/15 ⋅ 0

一行代码搞定数据库操作 - ThinkJDBC

1 简介 ,又名,一个简洁而强大的开源JDBC操作库。你可以使用Java像框架的M方法一样,。 先睹为快: //数据库配置(只需调用一次)D.setDbConfig("jdbc:mysql://127.0.0.1:3306/DbName?charac...

Leytton ⋅ 04/21 ⋅ 0

Kotlin EE 加速开发基于 Jakarta EE 的微服务分布式系统

     Kotlin 是一款基于 JVM 的编程语言,与 JVM 100%兼容,目前被谷歌定为安卓官方开发语言之一。Jakarta EE 是 Java EE 从 Oracle 剥离出来到 Eclipse 基金会接手时经历众多投票阶段定...

张旭乾 ⋅ 05/11 ⋅ 0

zrlog 1.10 发布,Java 构建的简约且好用的开源博客程序

ZrLog是使用Java开发的博客/CMS程序,具有简约,易用,组件化,内存占用低等特点。自带Markdown编辑器,让更多的精力放在写作上,而不是花费大量时间在学习程序的使用上。 v1.5以后版本可通过...

hibegin ⋅ 05/08 ⋅ 0

java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/28 ⋅ 0

MyBatis3-实现单表数据的增删查改

继续前一篇文章http://www.cnblogs.com/EasonJim/p/7050710.html所示的例子,返回的是单个实体,而接下来将进行列表的返回等操作: 一、查询列表 查询出列表,也就是返回List, 在这个例子中也...

easonjim ⋅ 2017/06/20 ⋅ 0

Leytton/ThinkJD

中文文档 English Document 最新版本 V1.2.3 1 简介 ,又名,一个简洁而强大的开源JDBC操作库。你可以使用Java像框架的M方法一样,。 先睹为快: //数据库配置(只需调用一次)D.setDbConfig(...

Leytton ⋅ 04/21 ⋅ 0

300行Python代码打造实用接口测试框架

300行Python代码打造实用接口测试框架 发表于:2017-6-29 09:47 作者:Leo Lee 来源:博客 字体:大 中 小 | 上一篇 | 下一篇 | 打印 |我要投稿 | 推荐标签: Python 接口测试   在刚开始实...

唐磊1118 ⋅ 2017/06/30 ⋅ 0

ThreadLocal源码分析

阅读原文请访问我的博客 BrightLoong's Blog 一. 简介 提醒篇幅较大需耐心。 简介来自ThreadLocal类注释 ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线...

BrightLoong ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud 微服务 (六) 服务通信 RestTemplate

壹 通信的方式主要有两种,Http 和 RPC SpringCloud使用的是Http方式通信, Dubbo的通信方式是RPC 记录学习SpringCloud的restful方式: RestTemplate (本篇)、Feign 贰 RestTemplate 类似 Http...

___大侠 ⋅ 4分钟前 ⋅ 0

React创建组件的三种方式

1.无状态函数式组建 无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。 无状态函数式组...

kimyeongnam ⋅ 11分钟前 ⋅ 0

react 判断实例类型

今天在写组件的时候想通过判断内部子元素不同而在父元素上应用不同的class,于是首先要解决的就是如何判断子元素的类型。 这里附上一个讲的很全面的文章: https://www.cnblogs.com/onepixel...

球球 ⋅ 18分钟前 ⋅ 0

Centos7备份数据到百度网盘

一、关于 有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百...

zctzl ⋅ 32分钟前 ⋅ 0

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 35分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 42分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 今天 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部