`
Dikaros
  • 浏览: 3528 次
文章分类
社区版块
存档分类
最新评论

java代码统计工具

 
阅读更多

很早写的一个java代码统计,现在把代码贴上来,由于完全不会做界面,所以这个就是控制台版的了

很简单的一个类,统计的是.java和.xml(安卓的布局文件也算代码量吧)

如果遇到错误,还希望大家给我留言吐舌头

package com.io.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class CodeInfo {

	int totalLength = 0;
	int codeLength = 0;
	int infoLength = 0;
	int blankLength = 0;

	String path;

	private ArrayList<String> codePaths;

	public CodeInfo(String path) {
		this.path = path;
		codePaths = new ArrayList<>();
		calculate();
		
	}
	
	private void calculate(){
		fileSize(new File(path));
		for (String string : codePaths) {
			countRate(string);
		}
	}
	
	/**
	 * 获取注释率
	 * @return
	 */
	public float getInfoRate(){
		return infoLength/(float)(infoLength+codeLength);
	}

	/**
	 * 统计文件夹中文件个数
	 * 
	 * @param dir
	 *            文件夹
	 * @return 文件
	 */
	private int fileSize(File dir) {
		int size = 0;

		File[] files = dir.listFiles();

		for (File file : files) {
			if (file.isFile()) {
				size++;
				if ((file.getName().endsWith(".java") || file.getName()
						.endsWith(".xml"))
						&& !file.getName().equals("R.java")
						&& !file.getName().equals("BuildConfig.java")) {
					codePaths.add(file.getAbsolutePath());
				}
			} else {
				size += fileSize(file);
			}
		}

		return size;
	}
	/**
	 * 代码统计
	 * 
	 * @param path
	 *            路径
	 * @return
	 */
	private float countRate(String path) {
		// 注释
		int infoLine = 0;
		// 代码
		int codeLine = 0;
		// 空行
		int blankLine = 0;
		float num = 0;
		try {
			BufferedReader reader = new BufferedReader(new FileReader(path));
			String line;
			while ((line = reader.readLine()) != null) {
				if (line.trim().startsWith("/*")) {
					while (!(line.trim().endsWith("*/"))) {
						infoLine++;
						line = reader.readLine();
					}
					infoLine++;
				} else if (line.trim().startsWith("//")) {
					infoLine++;
				} else if (line.equals("")) {
					blankLine++;
				} else {
					codeLine++;
				}
			}
			/**
			 * 
			 * sdfsdfsd
			 */
		} catch (IOException e) {
			e.printStackTrace();
		}
		totalLength = totalLength + infoLine + codeLine + blankLine;
		codeLength = codeLength + codeLine;
		infoLength = infoLength + infoLine;
		blankLength = blankLength + blankLine;
		return num;
	}

	/**
	 * 统计注释数
	 * 
	 * @param path
	 * @return
	 */
	private int infoCount(String path) {
		int count = 0;
		try {
			@SuppressWarnings("resource")
			BufferedReader reader = new BufferedReader(new FileReader(path));
			String line;
			while ((line = reader.readLine()) != null) {
				if (line.trim().startsWith("/*")) {
					while (!(line.endsWith("*/"))) {
						count++;
						line = reader.readLine();
					}
					count++;
				} else if (line.trim().startsWith("//")) {
					count++;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return count;
	}

	/**
	 * 统计代码数
	 * 
	 * @param path
	 * @return
	 */
	@SuppressWarnings("resource")
	private static int codeCount(String path) {
		int codeLine = 0;
		BufferedReader reader;
		try {
			reader = new BufferedReader(new FileReader(path));
			String line;

			while ((line = reader.readLine()) != null) {
				if (line.trim().startsWith("/*")) {
					while (!(line.endsWith("*/"))) {
						line = reader.readLine();
					}
				} else if (line.trim().startsWith("//")) {
				} else if (line.equals("")) {
				} else {
					codeLine++;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return codeLine;

	}

	/**
	 * 统计空行
	 * 
	 * @param path
	 *            路径
	 * @return
	 */
	private int blankCount(String path) {
		int blankCount = 0;
		try {
			@SuppressWarnings("resource")
			BufferedReader reader = new BufferedReader(new FileReader(path));
			String line;
			while ((line = reader.readLine()) != null) {
				if (line.trim().startsWith("/*")) {
					while (!(line.endsWith("*/"))) {
						line = reader.readLine();
					}
				} else if (line.trim().startsWith("//")) {
				} else if (line.equals("")) {
					blankCount++;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return blankCount;
	}



	/**
	 * @return path
	 */
	public String getPath() {
		return path;
	}



	/**
	 * @param path 要设置的 path
	 */
	public void setPath(String path) {
		this.path = path;
		totalLength = 0;
		codeLength = 0;
		infoLength = 0;
		blankLength = 0;
		codePaths.clear();
		calculate();
	}



	/**
	 * @return 总行数
	 */
	public int getTotalLength() {
		return totalLength;
	}


	/**
	 * 获取实际行数
	 * @return
	 */
	public int getRealLength(){
		return totalLength-blankLength;
	}

	/**
	 * 获取纯代码行数
	 * @return codeLength
	 */
	public int getCodeLength() {
		return codeLength;
	}



	/**
	 * 获取注释行数
	 * @return infoLength
	 */
	public int getInfoLength() {
		return infoLength;
	}
	
	/**
	 * 获取代码率
	 * @return
	 */
	public float getCodeRate(){
		return codeLength/(float)(codeLength+infoLength);
	}
	
	/**
	 * 打印统计信息
	 */
	public void print(){
		System.out.println(path);
		System.out.println("共" + getTotalLength() + "行");
		System.out.println("实际代码(除去空行)"+getRealLength()+"行");
		System.out.println("注释:" + infoLength);
		System.out.println("代码:" + codeLength);
		System.out.println("空行:" + blankLength);
		System.out.println("注释率:" + getInfoRate());
		System.out.println("代码率:" + getCodeRate());
	}

	/**
	 * @return blankLength
	 */
	public int getBlankLength() {
		return blankLength;
	}
	
	
}

Main.java

package com.io.util;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入项目文件夹地址:");
		String path = scanner.nextLine();
		CodeInfo codeInfo = new CodeInfo(path);
		codeInfo.print();
	}
}


另外打包成了jar 大家可以在控制台使用java -jar使用

点击此处下载jar

分享到:
评论

相关推荐

    Java代码统计工具

    Java代码统计工具是一款高效实用的软件,专门针对Java和JSP编程语言的代码进行分析与统计。这款工具在开发和维护过程中起到了重要作用,因为它能够帮助程序员了解项目代码的规模、复杂性和质量,从而进行更有效的...

    java代码统计工具及完整代码参考.pdf

    Java代码统计工具是一种小型应用程序,用于计算特定目录下Java源代码的总行数、注释行数和空格行数。这个程序设计为在Windows 7和XP操作系统上运行,但在其他非Windows环境下可能需要对代码进行修改才能正常工作。...

    JAVA代码统计工具,可以按人统计,很不错

    Java代码统计工具是一种用于分析和量化Java源代码的软件,主要功能是对代码量进行统计,以便于项目管理和团队协作。这种工具通常可以帮助开发者、项目经理和质量保证人员了解项目的规模、复杂性和开发进度。它们能够...

    java代码统计工具-java代码统计工具

    非常好用的JAVA代码统计工具,直接执行即可

    C++、Java代码统计工具

    总的来说,C++和Java代码统计工具是开发流程中不可或缺的一部分,它们通过提供量化数据,帮助开发者更好地理解和管理项目,从而提高开发效率和代码质量。在选择或使用这类工具时,应根据具体需求,考虑其是否支持所...

    代码统计工具【java】

    本篇将详细探讨如何使用代码统计工具来处理Java项目,以及相关的技术要点。 首先,我们需要明确的是代码统计的目标。在Java环境下,有效的代码行数通常指的是不包括空行、注释行、导入语句等的可执行代码行。这些...

    Java代码统计实现

    本文将深入探讨如何实现一个Java代码统计工具,该工具可以计算正常代码行数、空白行数、注释行数以及总行数,并能以树状结构展示目录。我们将基于提供的"Java代码行统计软件.jar"来讨论相关的知识点。 首先,我们要...

    代码统计工具

    代码统计工具是一款非常实用的软件开发辅助工具,它主要用于帮助开发者量化分析项目代码的质量和规模。通过对代码行数、注释比例、有效行数和基本行数等关键指标的统计,开发者可以更好地理解和评估项目的复杂性,...

    java开发代码注释情况统计工具

    这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...

    java代码行数统计工具

    总的来说,IrisCodeCounter作为一个跨平台的代码行数统计工具,对于理解和优化代码库的规模非常有用。无论是在个人项目还是大型团队开发中,定期使用这类工具进行代码统计都是良好实践的一部分,有助于提升开发效率...

    代码行差异统计工具,勇于比较两个代码包的新增,修改,删除的代码量,并能按语言类型归类

    如果需要,可以把diffcount当作普通的代码行统计工具,统计一个代码包 代码统计使用 -c (或者--count-only)参数, 在diffcount目录下执行 diffcount -c test\count 执行结果如下: G:\diffcount&gt;diffcount -c ...

Global site tag (gtag.js) - Google Analytics