import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class CountCodes extends JFrame{
//新增
private long allCode = 0;
private long allComment = 0;
private long allBlank = 0;
private long codeLines = 0;
private long commentLines = 0;
private long blankLines = 0;
private File fileName;
private JLabel pathLabel;
private JTextField pathField;
private JButton openButton;
private JPanel panelNorth, panelSouth;
private ArrayList<File> list = new ArrayList<File> ();
private String[] tableHeader = {"文件名", "JAVA代码行数", "注释行数", "空行"};
private Vector<String> vectorHeader = new Vector<String> ();
private Vector<Vector> values = new Vector<Vector> ();
private JTable table;
private DefaultTableModel tableModel;
private JScrollPane scrollPane;
public CountCodes(){
super("Count Codes");
pathLabel = new JLabel("文件路径: ");
pathField = new JTextField(100);
pathField.setEditable(false);
openButton = new JButton("打开");
openButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
openFile();
if (fileName == null)
return;
analysisFileOrDir(fileName);
for(File file : list){
analyze(file);
}
//新增
System.out.println(allCode);
System.out.println(allComment);
System.out.println(allBlank);
System.out.println("-------------------");
Vector<String> value = new Vector<String> ();
value.add("总计");
value.add(String.valueOf(allCode));
value.add(String.valueOf(allComment));
value.add(String.valueOf(allBlank));
values.add(value);
}
});
panelNorth = new JPanel();
panelNorth.setLayout(new BorderLayout());
panelNorth.add(pathLabel, BorderLayout.WEST);
panelNorth.add(pathField, BorderLayout.CENTER);
panelNorth.add(openButton, BorderLayout.EAST);
for (int i=0; i<tableHeader.length; i++)
vectorHeader.add(tableHeader[i]);
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);
setSize(450, 400);
setVisible(true);
}
public static void main(String args[]){
CountCodes countCodes = new CountCodes();
countCodes.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void openFile(){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION)
return;
fileName = fileChooser.getSelectedFile();
if (fileName == null || fileName.getName().equals(""))
JOptionPane.showMessageDialog(this, "Invalid File Name", "Invalid File Name", JOptionPane.ERROR_MESSAGE);
pathField.setText(fileName.toString());
}
private void zeroVariables(){
this.codeLines = 0;
this.commentLines = 0;
this.blankLines = 0;
}
private void analysisFileOrDir(File fileName){
if(fileName.isFile()){
list.add(fileName);
return;
}
else{
File[] fileArray = fileName.listFiles();
for(File inArray : fileArray){
if(inArray.isFile() && inArray.getName().matches(".*\\.java$")){
list.add(inArray);
}
else if(inArray.isDirectory()){
analysisFileOrDir(inArray);
}
}
}
}
private void analyze(File fileName){
Vector<String> value = new Vector<String> ();
String[] strArray = fileName.toString().split("\\\\");
// value.add(strArray[strArray.length-1]);
value.add(fileName.toString());
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader(new FileReader(fileName));
String line = "";
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.matches("^[\\s&&[^\\n]]*$")) {
blankLines++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {
commentLines++;
comment = true;
} else if (line.startsWith("/*") && line.endsWith("*/")) {
commentLines++;
} else if (true == comment) {
commentLines++;
if (line.endsWith("*/")) {
comment = false;
}
} else if (line.startsWith("//")) {
commentLines++;
} else {
codeLines++;
}
}
value.add(String.valueOf(codeLines));
value.add(String.valueOf(commentLines));
value.add(String.valueOf(blankLines));
values.add(value);
this.table.revalidate();
allCode+=codeLines;
allComment+=commentLines;
allBlank+=blankLines;
// System.out.println(all1);
// System.out.println(all2);
// System.out.println(all3);
// System.out.println("-------------------");
zeroVariables();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
分享到:
相关推荐
统计Java代码行数的方法有很多种,这里我们将介绍手动统计和使用工具自动统计两种方式。 1. **手动统计**: - 打开`mypro.rar`压缩包,解压后找到包含Java源代码的`.java`文件。 - 使用文本编辑器打开文件,逐行...
在这个场景中,我们关注的是一个名为"java代码统计工具"的应用,它专门用于统计.java文件中的代码行数和注释行数。这个工具包含了三个关键文件:`java代码统计工具.exe`是可执行程序,用户可以直接运行来执行统计;`...
### 代码行统计Java代码 #### 背景与意义 在软件开发过程中,了解项目的规模对于项目管理和维护至关重要。代码行(LOC, Lines of Code)是衡量软件规模的一个常见指标,它可以帮助开发者评估项目的复杂度、估算...
例如,Java代码可能需要处理import语句的变化,而XML文件则需要关注标签的增删。 3. **处理合并冲突**:在多人协作的环境中,可能会有合并冲突的情况,此时需要正确处理这些特殊情况。 4. **性能优化**:如果SVN仓库...
这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...
Java代码量统计,可同时统计*.HTM,*.HTML,*.Java,*.JSP,*.SQL,*.XML文件的文件个数和代码行数
在Java项目中,代码行数统计尤其重要,因为它可以帮助开发者保持代码的整洁和可读性,防止过度复杂化。通过这个Eclipse插件,开发者可以轻松地查看代码中的注释行数,这在一定程度上反映了代码的可读性和文档质量。...
针对Java编程语言,有一个专门用于统计代码行数的工具,它不仅适用于Java,还支持C++、Delphi和C#等其他编程语言。本文将详细介绍这个名为"IrisCodeCounter"的工具,以及如何利用它来有效地分析和管理代码库。 ...
例如,输入`cloc --by-file --include-lang=Java .`,其中`.`代表当前目录,`--include-lang=Java`确保只统计Java文件。CLOC会返回一个详细的报告,包括每种类型(如代码、注释、空行)的行数。 3. **PMD和...
"eclipse代码行数统计插件"就是这样一个工具,它能够帮助开发者快速地统计出项目中的代码行数,包括注释和空行。 在Eclipse中,安装和使用代码行数统计插件非常简单。首先,用户需要打开"Windows"菜单,然后选择...
下面是一个简化的Java代码片段,展示了如何处理Java源文件的代码行统计: ```java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class ...
统计Java代码行数有助于估计项目的维护成本和开发进度。注释在Java中很重要,它们提供了代码的解释,但不应计入代码行数统计中。同样,空行也有助于提高代码可读性,但不贡献实际功能。 C#是微软公司开发的一种.NET...
总之,"java代码行数统计源码"提供的工具是一个实用的开发辅助程序,它综合运用了Java的文件操作、源代码解析、数据处理和可能的用户界面设计等多个技术领域,为开发者提供了一种量化评估项目规模的方式。...
本文将深入探讨如何实现一个Java代码统计工具,该工具可以计算正常代码行数、空白行数、注释行数以及总行数,并能以树状结构展示目录。我们将基于提供的"Java代码行统计软件.jar"来讨论相关的知识点。 首先,我们要...
学JAVA的朋友们,你们知道你自己已编过多少行JAVA代码吗?自己写了个统计代码的程序,打包成JAR,有源码,有界面,使用方便。可以统计代码行数、注解行数,及接口、方法、类数,可以分作者统计。