`

快速统计java代码行数

阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 代码行数统计
 */
public class CodeCounter {

	/**
	 * 代码行数统计
	 */
	public static void main(String[] args) {
		String file = CodeCounter.class.getResource("/").getFile();
		String path = file.replace("target/test-classes", "src");

		ArrayList<File> al = getFile(new File(path));
		for (File f : al) {
			if (f.getName().matches(".*\\.java$")){ // 匹配java格式的文件
				count(f);
				System.out.println(f);
			}
		}
		System.out.println("统计文件:" + files);
		System.out.println("代码行数:" + codeLines);
		System.out.println("注释行数:" + commentLines);
		System.out.println("空白行数:" + blankLines);
	}
	
	static long files = 0;
	static long codeLines = 0;
	static long commentLines = 0;
	static long blankLines = 0;
	static ArrayList<File> fileArray = new ArrayList<File>();
	
	/**
	 * 获得目录下的文件和子目录下的文件
	 * @param f
	 * @return
	 */
	public static ArrayList<File> getFile(File f) {
		File[] ff = f.listFiles();
		for (File child : ff) {
			if (child.isDirectory()) {
				getFile(child);
			} else
				fileArray.add(child);
		}
		return fileArray;

	}

	/**
	 * 统计方法
	 * @param f
	 */
	private static void count(File f) {
		BufferedReader br = null;
		boolean flag = false;
		try {
			br = new BufferedReader(new FileReader(f));
			String line = "";
			while ((line = br.readLine()) != null) {
				line = line.trim(); // 除去注释前的空格
				if (line.matches("^[ ]*$")) { // 匹配空行
					blankLines++;
				} else if (line.startsWith("//")) {
					commentLines++;
				} else if (line.startsWith("/*") && !line.endsWith("*/")) {
					commentLines++;
					flag = true;
				} else if (line.startsWith("/*") && line.endsWith("*/")) {
					commentLines++;
				} else if (flag == true) {
					commentLines++;
					if (line.endsWith("*/")) {
						flag = false;
					}
				} else {
					codeLines++;
				}
			}
			files++;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
					br = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

 

4
6
分享到:
评论
2 楼 yangnianbing110 2018-03-21  
如果有一行代码是
/*sdsdsd*/String a = ""
就挂了,在再次以*/结尾之前,都被认为是注释了
+
1 楼 greatwqs 2016-05-12  
final String path = "/Users/eagle/Workspace/eclipse";    

相关推荐

    java代码行数统计源码

    java代码行数统计软件.支持 整个工程的代码行数统计.源代码.

    java 统计代码行数

    用于统计项目的代码行数。在代码中修改路径即可。适用于多种文件格式。

    统计java代码行数

    能统计编写了多少行Java代码和注释,和类的个数

    java代码行数统计工具

    一个统计源码行数的小工具。 支持 C++、Delphi、Java 和 C# 源码。

    java实现的svn统计修改代码行数完整源码

    用于svn统计修改代码行数 原博客地址:http://blog.csdn.net/skygpan/article/details/47749891

    代码行数统计工具

    支持 js java .net asp html .c vb sql 所有源码文件的代码行数统计,可统计文件夹内文件的代码行数。一键统计,快捷方便

    统计代码行数的Eclipse插件

    可以统计代码行数的插件,测试完全,保证正确,可以统计工程目录,单个文件,多个文件java代码中注释,代码行数

    java代码行数统计

    MyEclipse中有一项代码统计的功能,可以统计出代码的行数,但是只能查看Java代码的行数,而Eclipse中根本没有此功能(可能本人没有找到),所以我写了一个代码统计的代码,可以查看工程中的Java代码,jsp代码,xml...

    源代码行数统计器(统计软件工程源代码行数)

    源代码行数统计器 1.5 本软件用于统计软件工程源代码行数,可对指定的子目录下或整个目录树中所有指定类型的源代码文件进行行数统计。 本软件的统计结果包含源代码中的注释行和空行,因为作者认为它们同样也是源...

    代码行数统计软件 统计有效代码

    自己写的一个 简单的java代码行数统计软件 可以统计你的工作量 统计你一个文件夹下的代码 有效代码行数,空行数,注释行数 包括子文件夹下的代码 如果需要源码 请联系本人

    java代码行数统计.zip

    一个统计Java代码的小工具,用于统计你写的Java代码,可以知道你写了多少行代码

    代码统计工具 可统计项目行数

    可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型选择相应的统计方式,并将...

    java实现统计代码行数

    用java实现统计代码行数,运行程序会统计编程的工作量以及有效代码的行数

    统计你写的java代码行数

    NULL 博文链接:https://ily.iteye.com/blog/1399319

    java写的代码行数统计工具

    java写的代码行数统计工具 前两天上传了一个 发现一个bug 呵呵 欢迎大家使用。有不足指出。

    Java代码统计工具

    Java代码量统计小工具 1 可按JavaDoc按作者统计代码量 2 统计代码行数、注释行数、空白行、注释率等 3 按某目录及其子目录内.java文件统计 4 需要JRE

    一个统计代码行数的小工具

    一个统计代码行数的小工具,绿色,支持多种代码格式:xml,vb,c,sql,h,sh,dfm,java,php,asp,txt,jsp,html,等等。

    java写的源代码行数统计器.

    java写的源代码行数统计器.界面美观,功能实用。

Global site tag (gtag.js) - Google Analytics