最近做一个项目,eclipse版本没有带统计代码行数的插件,公司还不能随便上网。所以在网上找了找资料,发现用java做的多少都稍有问题,便自己改了改,实现如下:统计代码行数:包括java,jsp,js文件。统计可以按照单个文件统计,也可以按照目录统计(包含子目录)。
以下是运行后的截图和部分代码。
package codeComprehensive;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class CountCodes extends JFrame{
private static final long serialVersionUID = 1L;
private long codeLines = 0; // 单个文件的代码行数
private long commentLines = 0; // 单个文件的注释行数
private long allBlankLines = 0; // 单个文件的空行行数
private long allLines = 0; // 单个文件的总行数
private long allCodeLines = 0; // 总代码行数
private long allCcommentLines = 0; // 总的注释行数
private long blankLines = 0; // 总空行行数
private long allFilesLines =0;// 多个文件的总行数
private File fileName;
private JLabel pathLabel;
private JTextField pathField;
private JButton openButton;
private JButton clearButton;
private JPanel panelNorth, panelSouth, clearPanel;
private ArrayList<File> list = new ArrayList<File> ();
private String[] tableHeader = {"File Name", "Code Lines", "Comment Lines", "Blank Lines", "All Lines"};
private Vector<String> vectorHeader = new Vector<String> ();
// 统计结果结合
private Vector<Vector> values = new Vector<Vector> ();
// 综合统计行数据
private Vector<String> allValues = new Vector<String> ();
private JTable table;
private DefaultTableModel tableModel;
private JScrollPane scrollPane;
public CountCodes(){
super("Welcome to use Count Codes --wujingyong");
pathLabel = new JLabel("File Directory : ");
pathField = new JTextField(100);
pathField.setEditable(false);
openButton = new JButton("Open");
clearButton = new JButton("Clear");
openButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
////////每次统计前,先清空之前的统计结果/////////
int a = tableModel.getRowCount();
while(a>0)
{
a--;
tableModel.removeRow(a);
}
////////////
openFile();
if (fileName == null) {
return;
}
// 如果清空了统计记录,则重新统计;否则包含之前的统计记录
if (tableModel.getRowCount() == 0) {
list = new ArrayList<File>();
}
analysisFileOrDir(fileName);
for(File file : list){
analyze(file);
}
////////////追加最后一行总数的统计//////////////////
if (values.size()!=0 ) {
// 清空之前的最后统计数据
allValues = new Vector<String>();
// 追加本次统计的最后综合数据
allValues.add("Lines SUM :");
allValues.add(String.valueOf(allCodeLines));
allValues.add(String.valueOf(allCcommentLines));
allValues.add(String.valueOf(allBlankLines));
allFilesLines = allCodeLines + allCcommentLines + allBlankLines;
allValues.add(String.valueOf(allFilesLines));
values.add(allValues);
// 统计后,清空各项综合统计数据
zeroAllLines();
}
//////////////////////////////
}
});
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
int a = tableModel.getRowCount();
while(a>0)
{
a--;
tableModel.removeRow(a);
}
}
});
panelNorth = new JPanel();
clearPanel = new JPanel();
clearPanel.add(clearButton);
clearPanel.add(openButton);
panelNorth.setLayout(new BorderLayout());
panelNorth.add(pathLabel, BorderLayout.WEST);
panelNorth.add(pathField, BorderLayout.CENTER);
panelNorth.add(clearPanel, BorderLayout.EAST);
for (int i=0; i<tableHeader.length; i++) {
vectorHeader.add(tableHeader);
}
// 追加统计结果
tableModel = new DefaultTableModel(values, vectorHeader);
table = new JTable(tableModel);
scrollPane = new JScrollPane(table);
panelSouth = new JPanel();
panelSouth.setLayout(new BorderLayout());
panelSouth.add(scrollPane, BorderLayout.CENTER);
setLayout(new BorderLayout());
add(panelNorth, BorderLayout.NORTH);
add(panelSouth, BorderLayout.CENTER);
setBounds(222,200,512,400);
setVisible(true);
}
public static void main(String args[]){
CountCodes countCodes = new CountCodes();
countCodes.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
分享到:
相关推荐
在这个场景中,我们关注的是一个名为"java代码统计工具"的应用,它专门用于统计.java文件中的代码行数和注释行数。这个工具包含了三个关键文件:`java代码统计工具.exe`是可执行程序,用户可以直接运行来执行统计;`...
Java代码统计工具是一款专为Java开发者设计的实用小软件,旨在帮助程序员高效地分析和量化他们的代码库。这款工具能够提供一系列详细的统计信息,有助于理解项目中的代码结构和质量。以下将详细介绍该工具的主要功能...
例如,输入`cloc --by-file --include-lang=Java .`,其中`.`代表当前目录,`--include-lang=Java`确保只统计Java文件。CLOC会返回一个详细的报告,包括每种类型(如代码、注释、空行)的行数。 3. **PMD和...
针对Java编程语言,有一个专门用于统计代码行数的工具,它不仅适用于Java,还支持C++、Delphi和C#等其他编程语言。本文将详细介绍这个名为"IrisCodeCounter"的工具,以及如何利用它来有效地分析和管理代码库。 ...
Java代码统计工具是一种用于分析和量化Java源代码的软件,主要功能是对代码量进行统计,以便于项目管理和团队协作。这种工具通常可以帮助开发者、项目经理和质量保证人员了解项目的规模、复杂性和开发进度。它们能够...
Java代码统计工具是一种小型应用程序,用于计算特定目录下Java源代码的总行数、注释行数和空格行数。这个程序设计为在Windows 7和XP操作系统上运行,但在其他非Windows环境下可能需要对代码进行修改才能正常工作。...
这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...
非常好用的JAVA代码统计工具,直接执行即可
统计Java代码行数的方法有很多种,这里我们将介绍手动统计和使用工具自动统计两种方式。 1. **手动统计**: - 打开`mypro.rar`压缩包,解压后找到包含Java源代码的`.java`文件。 - 使用文本编辑器打开文件,逐行...
《代码行统计工具Java源码解析》 在软件开发中,代码行数(Lines of Code,简称LOC)常被用作衡量项目规模和工作量的一个参考指标。代码行统计工具可以帮助开发者快速了解项目的整体结构,便于管理和优化。本文将...
"统计源代码行数工具exe"正是这样一款实用工具,它允许用户快速地对代码库进行分析,统计不同类型的代码文件行数。 这款工具的主要功能在于它的易用性和灵活性。作为一个.exe可执行文件,用户无需安装任何额外的...
代码统计工具CCT,全称为Count_Code Tool CCTsetup,是一款专为软件开发人员设计的实用工具,用于量化分析项目中的代码量。它可以帮助开发者、项目经理和团队更好地理解项目的规模,评估工作进度,以及进行代码质量...
《代码量统计小工具V1.0:洞察编程工作的新视角》 在软件开发的世界里,代码量常常被用作衡量项目规模、开发者工作量以及软件复杂性的一个关键指标。"代码量统计小工具V1.0"就是这样一款实用的应用,它能够帮助...
Java代码统计小工具是一款实用的开发辅助程序,它能够帮助程序员快速、准确地了解自己在一天的工作中编写了多少有效的代码行、空行以及注释行。这个工具利用了Java编程语言中的正则表达式(Regular Expression)技术...
总的来说,C++和Java代码统计工具是开发流程中不可或缺的一部分,它们通过提供量化数据,帮助开发者更好地理解和管理项目,从而提高开发效率和代码质量。在选择或使用这类工具时,应根据具体需求,考虑其是否支持所...