最近做一个项目,eclipse版本没有带统计代码行数的插件,公司还不能随便上网。所以在网上找了找资料,发现用java做的多少都稍有问题,便自己改了改,实现如下:统计代码行数:包括java,jsp,js文件。统计可以按照单个文件统计,也可以按照目录统计(包含子目录)。
以下是运行后的截图和部分代码。
[img]http://s17.photo.store.qq.com/http_imgload.cgi?/rurl4_b=aa39a986443207181c218edd411e412328d0e6e855b613afe810560015a1b2f90876b7b69e02ceb0795356effa617ab32e3d2501c6b3fb642233f3d21b5df7df0ae64b8888a928cc0d3cfbba3281628955f72d2d/tj[/img]
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代码小工具
于 2009-11-17 21:26:04 首次发布