`
zhanglubing927
  • 浏览: 5193 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一个简单的代码统计器

    博客分类:
  • java
阅读更多

今天看了一个讲解正则表达式的视频,对正则表达式有了一些理解.

视频有一个示例,讲解使用正则表达式统计出源文件里的代码行,空白行以及注释行.感觉有些意思...

晚上我参考了视频,也动手写了一个,在这里贴出来,希望得到高手的指点.

 

/**
 * @author Jason
 * @version 1.0
 * 给出的一个java源文件或者目录, 统计出该java源文件或目录下所有的java源文件中 包含的空白行,注释行以及代码行.
 */

package counter;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;

import javax.swing.JFileChooser;

public class CoderCounter {
	// 代码行
	private long CodeLine = 0;
	// 注释行
	private long CommentLine = 0;
	// 空白行
	private long BlankLine = 0;
	// 统计文件个数
	private int Files = 0;

	private void doCountTask(File file) throws Exception {
		if (null == file) {
			//文件为空,返回
			return;
		}
		if (file.isFile() && file.getName().matches(".*\\.java$")) {
			//对java源文件进行行数统计
			Files++;
			fileCount(file);
		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				// 递归调用,直到每个子文件下的java源文件都被统计
				doCountTask(f);
			}
		}
	}

	private void fileCount(File file) {
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line = "";
			while ((line = br.readLine()) != null) {
				if (line.matches("(\\s*/\\*.*)|(\\s*\\*.*)|(\\s*//.*)")) {
					// 除去空白的字符(如制表符),以"/*","*","//"开头的算作注释行
					this.CommentLine++;
				} else if (line.matches("\\s*")) {
					// 由空白字符组成的算作空白行
					this.BlankLine++;
				} else {
					// 除上面的两种外,算作代码行.包括java代码,注解等等...
					this.CodeLine++;
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void printfResult() {
		if (this.Files == 0) {
			System.out.println("未统计任何文件!");
			return;
		}
		System.out.println("一共统计了 " + this.Files + " 个java源文件.");

		double total = this.BlankLine + this.CodeLine + this.CommentLine;
		Double code = new Double(this.CodeLine / total);
		Double comment = new Double(this.CommentLine / total);
		Double blank = new Double(this.BlankLine / total);

		DecimalFormat format = new DecimalFormat();
		// 比例使用百分数表示
		format.setMultiplier(100);

		System.out.println("代码行:" + CodeLine + " [" + format.format(code)
				+ "%]");
		System.out.println("注释行:" + CommentLine + " [" + format.format(comment)
				+ "%]");
		System.out.println("空白行:" + BlankLine + " [" + format.format(blank)
				+ "%]");
	}

	private File chooseFile() throws Exception {
		JFileChooser fc = new JFileChooser();
		fc.setDialogTitle("选择文件或目录...");
		fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		fc.showOpenDialog(null);
		return fc.getSelectedFile();
	}

	// 提供给用户调用的方法
	public void doCount() {
		try {
			this.doCountTask(this.chooseFile());
			this.printfResult();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//public static void main(String[] args) throws Exception {
	// 测试...
	//	CoderCounter cc = new CoderCounter();
	//	cc.doCount();
	//}
}

 

1
0
分享到:
评论
1 楼 zhanglubing927 2008-09-13  
写完了一看,好多人都写过...

相关推荐

    QT代码统计器QT代码统计器

    QT代码统计器是一款基于QT库开发的工具,用于分析和统计源代码的各个指标,如行数、注释量、空格与制表符等。QT(Qt)是跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。这款统计器能够帮助开发者更好...

    C++ 代码统计器

    本项目名为"C++ 代码统计器",是基于C++面向对象编程思想设计的一个程序,用于统计CPP源文件中的代码行、注释行、空行以及函数数量。下面我们将详细探讨这个项目的相关知识点。 首先,我们要理解C++面向对象编程的...

    源代码统计器,相当不错代码量统计工具,功能不错哦

    总的来说,源代码统计器是一个强大且实用的工具,它不仅能够提供精确的代码统计信息,还能帮助开发者和团队更好地管理和优化他们的项目。无论是个人开发还是团队协作,它都是一个不可或缺的辅助工具。如果你尚未尝试...

    一个源代码行数统计器

    源代码行数统计器是一种工具,它用于自动化计算编程项目中的源代码行数。这个工具对程序员来说非常有用,因为它可以快速提供项目规模的量化指标,帮助他们了解项目的复杂度和工作量。在软件开发中,代码行数常被用作...

    代码统计器

    在这个代码统计器中,可能就包含了一个对话框用于输入或选择待统计的代码文件。 5. **事件驱动编程**:MFC基于事件驱动编程模型,即程序响应用户的输入和系统事件来执行相应的操作。这对于实现代码统计器的交互逻辑...

    VB 代码统计器 可用于代码行数的统计

    总的来说,VB代码统计器是软件开发过程中的一个重要辅助工具,它能提供关于代码质量和工作量的量化信息,从而帮助开发团队更好地管理项目,提升代码质量,降低维护成本。通过持续地使用这样的工具,可以促进代码的...

    源码统计器源代码

    源码统计器是一种工具,主要用于计算编程项目中的源代码行数。这个工具对于开发者、项目经理以及软件质量保证人员来说非常有用,因为它可以帮助他们了解项目的规模,监控代码的增长,以及评估开发进度。源码统计器...

    asp代码行数统计器

    "asp代码行数统计器"是一个工具,专门用来计算ASP源代码文件中的代码行数,这对于代码维护、性能分析以及项目管理都有一定的帮助。 代码行数统计是软件工程中一个常见的指标,虽然它并不能完全反映代码的质量和复杂...

    程序代码量统计器 可以统计各种语言

    使用CountLines.exe这样的代码统计器通常非常简单。用户只需指定要分析的目录或文件,程序会自动遍历并计算所有符合预设或自定义类型的文件。输出结果可能会包括总行数、注释行数、空行数等,有的甚至会按文件或文件...

    SourceStat源代码统计器

    "SourceStat源代码统计器"是一款专为程序员和软件开发团队设计的实用工具,它能够高效、快速地统计项目中的源代码数量。该工具的核心特点是其简洁易用和强大的处理能力,无论面对多大规模的工程项目或是多层次的目录...

    代码统计工具【java】

    在IT行业中,代码统计是一项重要的任务,特别是在软件开发和维护过程中。它可以帮助开发者理解项目的规模,评估工作量,以及进行代码质量分析。本篇将详细探讨如何使用代码统计工具来处理Java项目,以及相关的技术...

    C++代码统计器升级版.zip

    总的来说,C++代码统计器升级版是一个强大的工具,无论是在专业开发环境中还是个人学习过程中,都能发挥重要作用。它的改进和新增功能提高了代码分析的效率和准确性,而提供的源代码和项目配置则为学习和定制提供了...

    python项目--代码统计器

    本项目是一个用Python编写的代码统计器,能够帮助用户快速、准确地统计代码量。下面将详细介绍这个项目的实现原理、功能以及可能涉及的关键知识点。 1. **Python基础** Python是一种高级编程语言,以其简洁明了的...

    C语言代码统计器

    《C语言代码统计器》是一款专为C及C++编程者设计的实用工具,旨在高效地统计代码文件的各类行数信息,包括总行数、有效代码行数、注释行数和空白行数,并计算出代码的注释率。这款统计器的独特之处在于其批量处理...

    代码行数统计器,可以统计一个工程下的代码行数。

    写了一个很简单的,目前支持统计.h和.cpp(如果想添加.hpp, .m文件,看看我的代码,加上很简单的。) 在Bin文件夹下有一个Config.INI的文件夹,修改一下自己要统计的路径就好了。 如果要编译工程的话,最好设置工作...

    VBScript写的代码统计器

    标题中的“VBScript写的代码统计器”指的是一个使用VBScript编程语言编写的工具,它的主要功能是统计代码行数,尤其是针对Java代码。VBScript,全称Visual Basic Script,是微软公司开发的一种轻量级、解释型的脚本...

    源代码行数统计器1.5

    "源代码行数统计器1.5"是一个实用的小工具,专为程序员设计,用于量化他们的编程工作量。这个工具能够统计多种类型的源代码文件,包括C语言(*.c)、C++(*.cpp)、头文件(*.h)以及Progress 4GL(*.pbl)的代码...

    java代码统计器【看看你有多少代码量】

    写的一个代码统计器,尝试了两种方法,一种多线程并行处理,一种直接迭代,经过对比,发现迭代效率要高得多,经过分析,使用多线程时因为其实每个线程运行的时间不长,因而新建线程带来的系统开销导致多线程情况下...

    通用型代码统计器

    【通用型代码统计器】是一款高效实用的工具,专为开发者设计,旨在提供全面的代码统计功能,无论是在何种编程环境中,它都能胜任工作。这款工具的灵活性和兼容性是其核心优势,使得开发者能够在不同的项目和编码语言...

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

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

Global site tag (gtag.js) - Google Analytics