基于JAVA实现的仿WC统计程序
2021-06-30 14:04
标签:简单 red override over invoke 目的 efault .sh img 目标要求: wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数,并具备了一定的图形化实现。 当初看到题目的第一想法就是打算用JAVA写一个简单的图形化窗口,用checkbox复选框实现三个功能的点击选择,用File类获得文件后再计算字符数、单词数、行数,再在TextArea上输出三者的统计结果。 只有一个类:WcGUI WcGUI包括图形化实现、控件监听方法、主函数 (1)空文件 (2)八个字符两个单词两行的文件 3.打开文件的窗口 由于JAVA已经很久没接触,所以一开始敲代码的时候有点不顺畅。先去csdn看了需要用的函数的相关博客,然后再开始写项目。对于布局控件的操作并不是特别熟练,导致窗口有些简陋(嘻嘻),在计算字符数、单词数、行数的时候,因为钻了牛角尖想得有点复杂,查看了别人的博客后,恍然大悟。 基于JAVA实现的仿WC统计程序 标签:简单 red override over invoke 目的 efault .sh img 原文地址:https://www.cnblogs.com/caihaijie/p/9642348.html1.Github 地址:https://gitee.com/caihaijie/WC.git
2.PSP表格
PSP2.1
预估耗时(分钟
实际耗时(分钟)
Planning
25
30
Estimate
200
230
Development
120
150
Analysis
20
20
Design Spec
20
20
Design Review
20
20
Coding Standard
10
15
Design
30
45
Coding
150
180
Code Review
20
15
Test
10
20
Reporting
30
40
Test Report
20
20
Size Measurement
10
10
Postmortem & Process Improvement Plan
20
30
705
855
3.解题思路
4.设计实现过程
public void createAndShowGUI()图形化实现
class FileChooseListener implements ActionListener 打开文件的监听方法,返回文件
class OneListener implements ActionListener
class TwoListener implements ActionListener
class ThreeListener implements ActionListener 三个复选框的监听方法,输出字符数、单词数、行数的统计结果
5.代码说明 1 public class WcGUI {
2 /**{
3 * 创建并显示GUI。出于线程安全的考虑,
4 * 这个方法在事件调用线程中调用。
5 */
6 //创建一个文本方便观看输出结果
7 private TextArea result = new TextArea();
8 /* 创建三个变量判断字符数、单词数、行数按钮的点击*/
9 int zifushu = 0;
10 int dancishu = 0;
11 int hangshu = 0;
12
13 public void createAndShowGUI() {
14 // 确保一个漂亮的外观风格
15 JFrame.setDefaultLookAndFeelDecorated(true);
16
17
18 // 创建及设置窗口
19 JFrame frame = new JFrame("WC");
20 JButton open = new JButton("open");
21
22 //给open按钮设置监听事件
23 open.addActionListener(new FileChooseListener());
24
25 frame.setLayout(new BoxLayout(frame,BoxLayout.Y_AXIS));
26 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
27 JPanel panel = new JPanel();
28
29 // 创建复选框
30 JCheckBox checkBox01 = new JCheckBox("字符数");
31 JCheckBox checkBox02 = new JCheckBox("单词数");
32 JCheckBox checkBox03 = new JCheckBox("行数");
33
34
35 checkBox01.addActionListener(new OneListener());
36 checkBox02.addActionListener(new TwoListener());
37 checkBox03.addActionListener(new ThreeListener());
38
39 Box topbox = Box.createHorizontalBox();
40 Box midbox = Box.createVerticalBox();
41 topbox.add(checkBox01);
42 topbox.add(checkBox02);
43 topbox.add(checkBox03);
44 midbox.add(result);
45 midbox.add(open);
46
47 /*panel.add(checkBox01);
48 panel.add(checkBox02);
49 panel.add(checkBox03);
50 panel.add(checkBox04);
51 panel.add(checkBox05);*/
52 panel.add(topbox);
53 panel.add(midbox);
54
55 frame.setContentPane(panel);
56
57 // 添加 标签
58 JLabel label = new JLabel("先勾选功能再open文件");
59 frame.getContentPane().add(label);
60
61 // 显示窗口
62 frame.pack();
63 frame.setBounds(50,50,500,500);
64 frame.setVisible(true);
65 }
66 //文件选择窗口的创建
67 class FileChooseListener implements ActionListener{
68
69 @Override
70 public void actionPerformed(ActionEvent e) {
71 JFileChooser jfc=new JFileChooser();
72 jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
73 jfc.showDialog(new JLabel(), "选择");
74 File file=jfc.getSelectedFile();//得到文件
75 if(file.isDirectory()){
76 System.out.println("文件夹:"+file.getAbsolutePath());
77 }else if(file.isFile()){
78 System.out.println("文件:"+file.getAbsolutePath());
79 }
80 try (BufferedReader br = new BufferedReader(new FileReader(file))) {
81
82 String s="" ;
83 int a=0;//字符数
84 int b=0;//行数
85 int c=0;//单词数
86
87 while ((s = br.readLine())!=null){
88
89 b++;
90 a+=s.length();
91 c+=s.split("\\s+").length;
92 }
93 if (zifushu==1){
94 result.append("字符数:"+a);}
95 if (dancishu==1){
96 result.append((" 单词数:"+c));
97 }
98 if (hangshu==1){
99 result.append(" 行数:"+b);
100 }
101 if (zifushu==0&&dancishu==0&&hangshu==0){
102 result.append("输出为空,请选择功能");
103 }
104 } catch (IOException e1) {
105 e1.printStackTrace();
106 }
107 }
108 }
109 //三个复选框的监听事件
110 class OneListener implements ActionListener{
111 public void actionPerformed(ActionEvent event)
112 {
113 JCheckBox checkBox = (JCheckBox) event.getSource();
114 System.out.println(checkBox.getText() + " 是否选中: " + checkBox.isSelected());
115 if (checkBox.isSelected()==true)
116 {zifushu=1;}
117 else {
118 zifushu=0;
119 }
120
121
122
123 }
124 }
125 class TwoListener implements ActionListener{
126
127 @Override
128 public void actionPerformed(ActionEvent e) {
129 JCheckBox checkBox = (JCheckBox) e.getSource();
130 System.out.println(checkBox.getText() + " 是否选中: " + checkBox.isSelected());
131 if (checkBox.isSelected()==true) {
132 dancishu = 1;
133 }
134 else{
135 dancishu = 0;
136 }
137 }
138 }
139 class ThreeListener implements ActionListener{
140
141 @Override
142 public void actionPerformed(ActionEvent e) {
143 JCheckBox checkBox = (JCheckBox) e.getSource();
144 System.out.println(checkBox.getText() + " 是否选中: " + checkBox.isSelected());
145 if (checkBox.isSelected()==true){
146 hangshu=1;}
147 else{
148 hangshu = 0;
149 }
150 }
151 }
152
153 public static void main(String[] args) {
154 // 显示应用 GUI
155 javax.swing.SwingUtilities.invokeLater(new Runnable() {
156 public void run() {
157 WcGUI wcGUI=new WcGUI();
158 wcGUI.createAndShowGUI();
159 }
160 });
161 }
162 }
6.测试运行
7.遇到的困难及解决方法