码迷,mamicode.com
首页 > 其他好文 > 详细

统计代码量的小程序

时间:2016-01-22 17:54:08      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

  比较简陋的统计代码的小工具,  根据自己的需求改改吧.

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

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.JTextField;
import javax.swing.border.EmptyBorder;

@SuppressWarnings("serial")
public class CountRows extends JFrame {

    private JPanel contentPane;
    private JTextField absolutePath;

    private int num; // 用来存储行数的
    private String path;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CountRows frame = new CountRows();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public CountRows() {
        setTitle("\u7EDF\u8BA1\u4EE3\u7801\u884C\u6570");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 384, 185);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        absolutePath = new JTextField();
        absolutePath.setBounds(67, 39, 200, 31);
        contentPane.add(absolutePath);
        absolutePath.setColumns(10);

        JLabel lblSrc = new JLabel("src\u8DEF\u5F84");
        lblSrc.setFont(new Font("宋体", Font.PLAIN, 15));
        lblSrc.setBounds(10, 39, 64, 31);
        contentPane.add(lblSrc);

        JButton result = new JButton("\u7EDF\u8BA1\u884C\u6570");
        result.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String path = absolutePath.getText();
                File file = new File(path);
                try {
                    getTotalRows(file);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                JOptionPane.showMessageDialog(contentPane, "代码一共有:" + num + "行");
            }
        });
        result.setFont(new Font("宋体", Font.PLAIN, 14));
        result.setBounds(48, 100, 93, 37);
        contentPane.add(result);

        JButton exit = new JButton("\u9000\u51FA");
        exit.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.exit(1);
            }
        });
        exit.setFont(new Font("宋体", Font.PLAIN, 14));
        exit.setBounds(270, 100, 93, 37);
        contentPane.add(exit);

        JButton view = new JButton("\u6D4F\u89C8");
        view.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                JFileChooser jfc = new JFileChooser("c:\\");
                jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                jfc.setDialogTitle("请选择要统计的src文件夹");
                int result = jfc.showOpenDialog(contentPane);
                if (result == JFileChooser.APPROVE_OPTION) {
                    path = jfc.getSelectedFile().getAbsolutePath();
                    absolutePath.setText(path);
                }
            }
        });
        view.setBounds(277, 36, 81, 37);
        contentPane.add(view);

    }

    /**
     * 写一个方法,用来计算代码量
     * 
     * @throws IOException
     */
    private void getTotalRows(File file) throws IOException {

        // 如果是一个目录, 进行递归
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                File f = files[i];
                getTotalRows(f);
            }
        } else {
            // 如果是一个文件, 对这个文件进行统计
            
            // 单纯的统计Java代码
            if( !file.getName().endsWith(".java") ){
                return ;
            }
            
            BufferedReader br = new BufferedReader(new FileReader(file));
            String read = null;
            while ((read = br.readLine()) != null) {
                // 去换行符
                read.replaceAll("\r", "");
                read.replaceAll("\n", "");
                if ("".equals(read)) {
                    // 如果去除空行之后, 这一行是 "", 则不计数
                    continue;
                }
                num++;
            }
            br.close();
        }
    }
}

 

统计代码量的小程序

标签:

原文地址:http://www.cnblogs.com/wuqinglong/p/5151516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!