很早写的一个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和JSP编程语言的代码进行分析与统计。这款工具在开发和维护过程中起到了重要作用,因为它能够帮助程序员了解项目代码的规模、复杂性和质量,从而进行更有效的...
Java代码统计工具是一种小型应用程序,用于计算特定目录下Java源代码的总行数、注释行数和空格行数。这个程序设计为在Windows 7和XP操作系统上运行,但在其他非Windows环境下可能需要对代码进行修改才能正常工作。...
Java代码统计工具是一种用于分析和量化Java源代码的软件,主要功能是对代码量进行统计,以便于项目管理和团队协作。这种工具通常可以帮助开发者、项目经理和质量保证人员了解项目的规模、复杂性和开发进度。它们能够...
非常好用的JAVA代码统计工具,直接执行即可
总的来说,C++和Java代码统计工具是开发流程中不可或缺的一部分,它们通过提供量化数据,帮助开发者更好地理解和管理项目,从而提高开发效率和代码质量。在选择或使用这类工具时,应根据具体需求,考虑其是否支持所...
本篇将详细探讨如何使用代码统计工具来处理Java项目,以及相关的技术要点。 首先,我们需要明确的是代码统计的目标。在Java环境下,有效的代码行数通常指的是不包括空行、注释行、导入语句等的可执行代码行。这些...
本文将深入探讨如何实现一个Java代码统计工具,该工具可以计算正常代码行数、空白行数、注释行数以及总行数,并能以树状结构展示目录。我们将基于提供的"Java代码行统计软件.jar"来讨论相关的知识点。 首先,我们要...
代码统计工具是一款非常实用的软件开发辅助工具,它主要用于帮助开发者量化分析项目代码的质量和规模。通过对代码行数、注释比例、有效行数和基本行数等关键指标的统计,开发者可以更好地理解和评估项目的复杂性,...
这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...
总的来说,IrisCodeCounter作为一个跨平台的代码行数统计工具,对于理解和优化代码库的规模非常有用。无论是在个人项目还是大型团队开发中,定期使用这类工具进行代码统计都是良好实践的一部分,有助于提升开发效率...
如果需要,可以把diffcount当作普通的代码行统计工具,统计一个代码包 代码统计使用 -c (或者--count-only)参数, 在diffcount目录下执行 diffcount -c test\count 执行结果如下: G:\diffcount>diffcount -c ...