统计java方法(函数)的代码行数

今天想对一个java项目超过100行的方法进行一些代码优化。需要统计一下项目中的java类有哪些方法的代码超过了100行。在网上没找到类似的统计工具,就自己写了段代码进行统计。

编码思路:因为一个java类,最外层的{}可以标识类,次外层的{}就是方法或内部类了。为了便于编码,我把内部类也当作方法处理了。只要把次外层的{和}配对就是一个完整的方法了。因此我用先进后出的栈存储一个数组。数组的第一个元素是某个方法起始行,第二个元素是该行的行号。这样既能通过行号相减得到方法的行数,又能记录方法的位置。

具体代码如下:

package query;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.util.Stack;

public class StatNumForMethod {

public static void main(String[] args) {

File dir = new File("E:/workspace/XXX/src/main/java/");//要统计的java包的绝对路径

ergodicDir(dir);

}

/**

* 遍历目录下的所有java文件

* @param dir

*/

private static void ergodicDir(File dir) {

if(dir.isDirectory()){

for(File file : dir.listFiles()){

if(file.isDirectory()){

ergodicDir(file);

}

if(file.isFile() && file.getName().endsWith("java")){

statInFile(file);

}

}

}

}

private static void statInFile(File file) {

BufferedReader reader = null;

try {

//读一个文件输入流

reader = new BufferedReader(new FileReader(file));

String line = null;

Stack<String[]> stack = new Stack<String[]>();

int lineNum = 0;

while((line=reader.readLine()) != null){//遍历行

lineNum++;

//遇到{时把当前行和行号作为数组的元素进栈,遇到}时计算出方法的行数并打印行,出栈

int matchNum = getOccur(line, "{")-getOccur(line, "}");//一行可能有多个{或}

if(matchNum > 0){

for(int i=0;i<matchNum;i++){

stack.push(new String[]{line, lineNum+""});

}

}else{

for(int i=0;i<-matchNum;i++){

if(stack.isEmpty()){

System.out.println(file.getName()+"文件的{}不匹配,不能统计行数。。。当前的行号是"+lineNum);

return;

}

String[] popArr = stack.pop();

if(stack.size()==1){//当栈大小为1时说明一个方法结束了

int beginNum = Integer.parseInt(popArr[1]);//方法开始的行号

if(lineNum-beginNum >100){//方法内的代码超过100行

System.out.println(file.getName()+"文件的"+popArr[0]+"方法(第"+beginNum+"行)多达"+(lineNum-beginNum+1)+"行");

}

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

}finally{

if(reader != null){

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* src 源,find 查找目标,返回的就是找到的数目

* @param src 源

* @param find 查找目标

* @return 找到的数目

*/

private static int getOccur(String src, String find) {

int o = 0;

int index = -1;

while ((index = src.indexOf(find, index)) > -1) {

++index;

++o;

}

return o;

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 05:11:31

统计java方法(函数)的代码行数的相关文章

Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)

要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释开头,接着判断是否是块注释结尾,再判断是否是单行注释或者空白行,若都不是则是有效代码,统计行数+1. 对于文件夹路径,采用递归的方法判断子条目是文件还是文件夹,是文件就调用静态统计方法.源代码: public class CalculateRow { public static void main(

iOS 统计Xcode整个工程的代码行数

小技巧5-iOS 统计Xcode整个工程的代码行数 1.打开终端 2.cd 空格 将工程的文件夹拖到终端上,回车,此时进入到工程的路径 此时已经进入到工程文件夹下 3.运行指令 a. find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -l [最后一个字母是L不是数字1] 回车,执行--这条指令是获取每个文件内的代码行数,

【原】Mac下统计任意文件夹中代码行数的工具——cloc

这里介绍一个Mac系统统计代码行数的工具cloc. 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码,按照提示进行操作即可: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.利用homebrew下载并安装cloc. 继续在Terminal中输入: brew

统计一个目录下cpp代码行数,子目录下也能统计

1.参考 http://www.cnblogs.com/ZCplayground/p/6275365.html 方法一样.用了下面这一行神秘代码 DIR *.* /B> LIST.TXT 可以发现 DIR *.cpp /B> LIST.TXT 这样可以生成目录下cpp格式的文件记录 经过研究  我发现 把cpp去掉 DIR *. /B> LIST.TXT 这样就可以获取子目录的目录名 文章开头那个博客用了输出.bat文件并运行,在递归下出现各种问题,经过试验和改进,改为了直接运行指令,指

统计Eclipse中项目的总代码行数

在Eclipse中写Android项目,想要统计项目中写了多少行代码(大概数字,因为代码中还是有很多空白行的),怎么统计呢?把一个个代码文件有多少行先记下来,然后再加起来显然很费心费神,那怎么办呢?可以用Eclipse的文件搜索功能来统计. 步骤如下: 1.只选中项目中所有自己写的代码的目录(按住Ctrl连续选中),因为项目中还是有很多自动生成和第三方库的代码的,这些不能算到总代码行数中去.如下图所示,这里主要选择了src.layout.values这三个目录和AndroidManifest.x

图文介绍如何在Eclipse统计代码行数

使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expression),并在搜索文本框输入\n 3.在文件名中输入*或*.java 4.在范围里选中Enclosing projects 5.在Search窗口就会显示出项目或文件的代码行数

图文介绍如何在Eclipse统计代码行数(转)

使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expression),并在搜索文本框输入\n 3.在文件名中输入*或*.java 4.在范围里选中Enclosing projects 5.在Search窗口就会显示出项目或文件的代码行数 转自:链接

shell编程--统计代码行数

引:之前都太懒,没有及时把学到的知识总结到博客里.最近在学shell编程,正好作为养成写博客习惯的开端.平时我们都会遇到一个问题,写完一个项目后,想统计一下总的代码量,当代码文件很多时,一个个点开代码文件,然后把代码行数加起来是一件很费神的事.shell可以用短短几行代码就搞定这个问题. 一 shell源码(code_linage.sh): 1 #!/bin/bash 2 3 if [ $# -eq 1 ] && [ -d $1 ] 4 then 5 find $1 -type f -na

eclipse-统计代码行数

使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File...  2.选中正则表达式(Regular expression),并在搜索文本框输入\n 3.在文件名中输入*或*.java 4.在范围里选中Enclosing projects 5.在Search窗口就会显示出项目或文件的代码行数