[摘要]直接可以运行:选择好src文件夹,直接点“统计行数”就可以啦import java.awt.EventQueue;import java.awt.Font;import java.awt.event...
直接可以运行:选择好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();
}
}
}