代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
统计代码行数
作者:
kuas
/ 发布于
2013/1/15
/
605
package com.kuas.codeCount; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CodeCount { private File file; private int fileCount=0; /**编译正则表达式 正则表达式可能需要多次调用,因此提出来 只需编译一次 * 该正则表达式主要是匹配多行注释 */ private static Pattern pattern = Pattern.compile("/\\*([\\s|\\S])+?\\*/"); /** 获取文件f中的文本内容 * @param f 输入文件 * @return 文件中文本 * @throws IOException */ public String getFileContent(File f) throws IOException{ StringBuffer sb=new StringBuffer(); FileInputStream input=new FileInputStream(f); byte[] b=new byte[1024]; int count=0; while((count=input.read(b))!=-1){ sb.append(new String(b,0,count)); } input.close(); return sb.toString(); } /**统计文本中的代码行数 * 1.用正则表达式出去块注释即多行注释 * 2.再将字符串按照回车符分割成字符串数组 * 3.除去空白行或者单行注释行 * @param content 输入文本 * @return 文本中代码行数 */ public int getCodeCount(String content){ int rowCount=0; Matcher matcher = pattern.matcher(content); content=matcher.replaceAll(" "); String ss[]=content.split("\n"); for(String s:ss){ if(s.trim().length()>0&&!s.trim().startsWith("//")) rowCount++; } return rowCount; } /** 统计目录dir中的代码行数 * @param dir 要目录dir * @param codes 代码文件列表 * @return 当前目录的代码总行数 * @throws Exception */ public int dirCount(File dir,List<CodeCount> codes) throws Exception{ int totalCount=0; if(dir.isDirectory()) { File[] files = dir.listFiles(); for(File f:files){ if(f.isFile()){ CodeCount c=new CodeCount(); c.file=f; c.fileCount=getCodeCount(getFileContent(f)); totalCount+=c.fileCount; //c.setFileCount(c.getCodeCount()); codes.add(c); } else{ totalCount+= dirCount(f,codes); } } }else{ CodeCount c=new CodeCount(); c.file=dir; c.fileCount=getCodeCount(getFileContent(dir)); codes.add(c); totalCount+=c.fileCount; } return totalCount; } /* 复写父类object中tostring方法方便输出 * @see java.lang.Object#toString() */ @Override public String toString() { return "CodeCount [file=" + file + ", fileCount=" + fileCount + "]\n"; } public static void main(String[] args) throws Exception { Integer totalCount=new Integer(0); List<CodeCount> codes=new ArrayList<CodeCount>(); CodeCount code=new CodeCount(); String path=""; System.out.println("请输入路径:"); Scanner scanner=new Scanner(System.in); path=scanner.next(); totalCount=code.dirCount(new File(path),codes); //统计结果输出 System.out.println(path+"中所有文件:"); System.out.println(codes); System.out.println("文件总数:"+codes.size()); System.out.println("总代码行数"+totalCount); System.out.println("平均每个文件代码行数:"+totalCount/codes.size()); } }
试试其它关键字
统计代码行数
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
实现测量程序运行时间及cpu使用时间
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
kuas
贡献的其它代码
(
1
)
.
统计代码行数
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3