`

统计JAVA代码

阅读更多


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代码行数

    统计Java代码行数的方法有很多种,这里我们将介绍手动统计和使用工具自动统计两种方式。 1. **手动统计**: - 打开`mypro.rar`压缩包,解压后找到包含Java源代码的`.java`文件。 - 使用文本编辑器打开文件,逐行...

    java代码统计工具

    在这个场景中,我们关注的是一个名为"java代码统计工具"的应用,它专门用于统计.java文件中的代码行数和注释行数。这个工具包含了三个关键文件:`java代码统计工具.exe`是可执行程序,用户可以直接运行来执行统计;`...

    代码行统计Java代码

    ### 代码行统计Java代码 #### 背景与意义 在软件开发过程中,了解项目的规模对于项目管理和维护至关重要。代码行(LOC, Lines of Code)是衡量软件规模的一个常见指标,它可以帮助开发者评估项目的复杂度、估算...

    java实现的svn统计修改代码行数完整源码

    例如,Java代码可能需要处理import语句的变化,而XML文件则需要关注标签的增删。 3. **处理合并冲突**:在多人协作的环境中,可能会有合并冲突的情况,此时需要正确处理这些特殊情况。 4. **性能优化**:如果SVN仓库...

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

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

    Java代码统计工具

    Java代码量统计,可同时统计*.HTM,*.HTML,*.Java,*.JSP,*.SQL,*.XML文件的文件个数和代码行数

    统计代码行数的Eclipse插件

    在Java项目中,代码行数统计尤其重要,因为它可以帮助开发者保持代码的整洁和可读性,防止过度复杂化。通过这个Eclipse插件,开发者可以轻松地查看代码中的注释行数,这在一定程度上反映了代码的可读性和文档质量。...

    java代码行数统计工具

    针对Java编程语言,有一个专门用于统计代码行数的工具,它不仅适用于Java,还支持C++、Delphi和C#等其他编程语言。本文将详细介绍这个名为"IrisCodeCounter"的工具,以及如何利用它来有效地分析和管理代码库。 ...

    代码统计工具【java】

    例如,输入`cloc --by-file --include-lang=Java .`,其中`.`代表当前目录,`--include-lang=Java`确保只统计Java文件。CLOC会返回一个详细的报告,包括每种类型(如代码、注释、空行)的行数。 3. **PMD和...

    eclipse代码行数统计插件

    "eclipse代码行数统计插件"就是这样一个工具,它能够帮助开发者快速地统计出项目中的代码行数,包括注释和空行。 在Eclipse中,安装和使用代码行数统计插件非常简单。首先,用户需要打开"Windows"菜单,然后选择...

    java 统计代码行数

    下面是一个简化的Java代码片段,展示了如何处理Java源文件的代码行统计: ```java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class ...

    代码行数统计器(html,java,c#,c++,c)

    统计Java代码行数有助于估计项目的维护成本和开发进度。注释在Java中很重要,它们提供了代码的解释,但不应计入代码行数统计中。同样,空行也有助于提高代码可读性,但不贡献实际功能。 C#是微软公司开发的一种.NET...

    java代码行数统计源码

    总之,"java代码行数统计源码"提供的工具是一个实用的开发辅助程序,它综合运用了Java的文件操作、源代码解析、数据处理和可能的用户界面设计等多个技术领域,为开发者提供了一种量化评估项目规模的方式。...

    Java代码统计实现

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

    java代码统计程序

    学JAVA的朋友们,你们知道你自己已编过多少行JAVA代码吗?自己写了个统计代码的程序,打包成JAR,有源码,有界面,使用方便。可以统计代码行数、注解行数,及接口、方法、类数,可以分作者统计。

Global site tag (gtag.js) - Google Analytics