统计代码量的小程序

直接可以运行:选择好src文件夹,直接点“统计行数”就可以啦

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 {
					nums(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.DIRECTORIES_ONLY);
				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 nums(File file) throws IOException {

		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (int i = 0; i < files.length; i++) {
				File f = files[i];
				nums(f);
			}
		} else {
			BufferedReader br = new BufferedReader(new FileReader(file));
			while (br.readLine() != null) {
				num++;
			}
			br.close();
		}
	}
}


你可能感兴趣的:(统计,代码量)