1、软 件 学 院课程设计汇报书课程名称 Java编程技术 设计题目 敏感词汇分析程序 专业班级 网络工程XXXX班 学 号 XXXXXXXXX 姓 名 XXX 指导老师 XXX 20 年 月1 设计时间20 年 月 日-20 年 月 日2 设计目标Java编程技术是一门实践性很强计算机专业基础课程,课程设计是学习完该课程后进行一次较全方面综合练习。其目标在于经过实践加深学生对面向对象程序设计理论、方法和基础知识了解,掌握使用Java语言进行面向对象设计基础方法,提升利用面向对象知识分析实际问题、处理实际问题能力,提升学生应用能力。3设计任务敏感词汇分析程序。要求以下:(1)使用图形用户界面实现。
2、(2)任意选择一个文本文件,分析该文件,假如存在敏感词汇,汇报每个词出现次数。(3)敏感词汇保留在sentive.txt文件中,每个词占一行,最少设置10个敏感词汇。4 设计内容4.1 概要设计此次java编程技术课程设计任务是要设计一个敏感词汇分析程序,这个程序是图形界面、流式布局、输入输出流、包和文件等技术综合应用。考虑到程序结构和易用性等多种性能,采取了FlowLayout流式布局嵌入按钮和TextArea文本区来完成程序主界面实现,选择了awt组件进行窗口和对话框实现。在运行程序时候,在要求sentive.txt文本中创建敏感词汇库,即把要分析敏感词汇写入,然后选择分析文档,进行分析。
3、文本选择实现:在进行词汇分析之前要进行文本选择,这期间经过查阅多种相关参考文件和java中帮助文档,用到了JfileChooser组件来实现对任意文本选择,从而能顺利选择多种文件,同时利用try,catch语句进行异常捕捉。词汇分析过程实现:利用了字符文件流FileReader和FileWriter类来实现文本读入和输出,利用RandomAccessFile来实现对敏感词汇过滤分析,最终达成了任务要求分析功效。在设计类时候,考虑到功效完善和程序运行代价尽可能小,本程序首先创建了一个主类实现窗口和主方法调用,设置了4个默认属性类完成相关功效性各项功效。在主类中,实现了对窗口对象实例化,注册了主方
4、法,从而生成了调用其它默认属性类及对象和方法借口,组成了整个程序中间部分。其它属性类也分别定义了多种方法和实例对象,分别完成了捕捉异常,词汇分析,文件选择等功效。4.2 程序结构图本程序实现是依靠主类完成对主方法生成,从而组成对其它默认属性类调用接口,实现整个程序运行,具体结构以下图所表示:(图4.2-1 敏感词汇分析程序结构图)4.3 自定义类及接口说明类名:FileTextChecker父类:JFrame作用:组成主程序主类,完成对各个默认属性类调用关键组员方法:public static void main(String args) /实例化窗体public FileTextChecke
5、r() /重写主类方法void iniFrame() /实例化窗体对象public File getAnalyzeFile() /实现和分析类接口public File getDictionFile() /对敏感词汇库类调用public void initFile() /文本调入方法4.4 程序运行和调试4.4.1 程序运行界面(图4.4-1 程序主界面)(图4.4-2 选择文本对话框)(图4.4-3 捕捉异常时对话框)4.4.2 程序运行结果在本程序中,要分析文本和敏感词汇库分别保留在了analy.txt和sentive.txt两个文档中,要分析文档中内容为“I like java very
6、 much.I also like speak English.I like swimming very much.My name is MrH.This java programe is developed by me.I think it is OK.Thank you for every person who ever helped me.”,敏感词汇分别是I,like,java,you,OK,is,very,me,thank,much,经过程序进行分析,得出正确结论,程序运行成功。具体运行结果见下图:(图4.4-4 程序运行结果图)4.4.3 程序错误调试(1)在FileTextChe
7、cker类中,运行过程中出现按钮不显示错误原因:流式布局默认分布模式是按着行,自动进行分布,沾满为止 处理措施:经过查找相关文件改变文本框,文本区组件大小尺寸,最终调至适宜尺寸,显示出了各个组件(2)在CFileChooser类中,出现实例对象无法找到错误 原因:类继承过程中要继承包没有引入 处理措施:引入java.io.File包处理问题(3)在CanalyzeLis类中运行过程中出现异常无法正常捕捉错误 原因:try.catch语句搭配使用应注意次序和异常事件监听 处理措施:改变catch语句位置并加入finally关键字处理4.5 程序源码主类FileTextChecker:packag
8、e compare1;import java.awt.Button;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.Window;import java.awt.event.WindowAdapter;import java.awt.event.WindowEven
9、t;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.File;import java.util.Hashtable;import java.util.Set;import java.util.TreeSet;import javax.swing.JFrame;import javax.swing.JScrollPane;public class FileTextChecker extends JFrame Button b1 = new Button(.)
10、; Button b2 = new Button(.); Button b3 = new Button(开始分析敏感词汇); Label l1 = new Label(请选择需要分析文档:); Label l2 = new Label(请选择敏感词汇库:); TextField ph1 = new TextField(20); TextField ph2 = new TextField(20); TextArea area = new TextArea(5, 15); File f1 = null; File f2 = null; public FileTextChecker() setTit
11、le(敏感词汇分析程序); setSize(250, 450); setResizable(false); setLocation(170, 200); iniFrame(); setVisible(true); void iniFrame() ph1.setEditable(false); ph2.setEditable(false);JScrollPane ps = new JScrollPane(area); /add window listener addWindowListener(new WindowAdapter() public void windowClosing(Windo
12、wEvent e) System.exit(0); ; / do layout setLayout(new GridLayout(2 , 1); Panel p1 = new Panel(); p1.setLayout(new GridLayout(5 , 1); Panel p10 = new Panel(); Panel p11 = new Panel(); Panel p12 = new Panel(); Panel p13 = new Panel(); Panel p14 = new Panel(); p10.setLayout(new FlowLayout(); p11.setLay
13、out(new FlowLayout(); p12.setLayout(new FlowLayout(); p13.setLayout(new FlowLayout(); p14.setLayout(new FlowLayout(); p10.add(l1); p11.add(ph1); p11.add(b1); p12.add(l2); p13.add(ph2); p13.add(b2); p14.add(b3); p1.add(p10); p1.add(p11); p1.add(p12); p1.add(p13); p1.add(p14); add(p1); add(ps); / add
14、listener b1.addActionListener(new CFileChooseLis(ph1); b2.addActionListener(new CFileChooseLis(ph2);initFile(); b3.addActionListener(new CAnalyzeLis(this, area); public File getAnalyzeFile() return f1; public File getDictionFile() return f2; public void initFile() f1 = ph1.getText().equals() ? null
15、: new File(ph1.getText(); f2 = ph2.getText().equals() ? null : new File(ph2.getText(); public static void main(String args) FileTextChecker f = new FileTextChecker(); 默认属性类:package compare1;public class IntString extends Object int num = 0; public IntString(int i) num = i; public int getNumber() ret
16、urn num; public void add() num += 1;package compare1;import java.io.File;import javax.swing.JFileChooser;public class CFileChooser extends JFileChooser / override public boolean accept(File f) if (f = null) return false; if (f.isDirectory() return true; if (f.getAbsolutePath().endsWith(.txt) return
17、true; return false; public boolean choosedFile() int state = this.showOpenDialog(null); File f = this.getSelectedFile(); if (accept(f) & state = JFileChooser.APPROVE_OPTION) return true; return false;package compare1;import java.awt.TextComponent;import java.awt.event.ActionEvent;import java.awt.eve
18、nt.ActionListener;import java.io.File;public class CFileChooseLis implements ActionListener public CFileChooseLis(TextComponent rst) t = rst; TextComponent t; public void actionPerformed(ActionEvent e) if (t = null) return;CFileChooser chooser = new CFileChooser(); if (chooser.choosedFile() File f =
19、 chooser.getSelectedFile(); t.setText(f.getAbsolutePath(); package compare1;import java.awt.TextComponent;import java.awt.Window;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.i
20、o.FileReader;import java.io.InputStreamReader;import java.util.Hashtable;import java.util.Iterator;import java.util.Set;import java.util.TreeSet;import java.util.regex.Matcher;import java.util.regex.Pattern;import javax.swing.JOptionPane;public class CAnalyzeLis implements ActionListener File analyz
21、eF; File dictionaryF; TextComponent rst; Window window; public CAnalyzeLis(FileTextChecker w, TextComponent tcomp) analyzeF = w.getAnalyzeFile(); dictionaryF = w.getDictionFile(); rst = tcomp; window = w; / Override public void actionPerformed(ActionEvent e) (FileTextChecker)window).initFile(); anal
22、yzeF = (FileTextChecker)window).getAnalyzeFile(); dictionaryF = (FileTextChecker)window).getDictionFile(); if (analyzeF = null) JOptionPane.showMessageDialog(window, 未添加分析文档,点击“确定”重新添加.); return; if (dictionaryF = null) JOptionPane.showMessageDialog(window, 未添加敏感词汇库,点击“确定”重新添加.); return;Set set = ne
23、w TreeSet(); String text = null; Hashtable table = new Hashtable(); try text = readTextFormFile(analyzeF); readWordFormFile(set, dictionaryF); Iterator t = set.iterator(); while (t.hasNext() String s = t.next(); if (s.length() = 1) String reg = s; Pattern pat = Ppile(reg); Matcher mat = pat.matcher(
24、text); while (mat.find() if (table.get(s) != null) table.get(s).add(); else table.put(s, new IntString(1); Iterator t2 = table.keySet().iterator();StringBuffer result = new StringBuffer(); while (t2.hasNext() String r = t2.next(); result.append(r); result.append( : ); result.append( + table.get(r).g
25、etNumber(); result.append(n); rst.setText(result.toString(); catch (Exception ev) ev.printStackTrace(); JOptionPane.showMessageDialog(window, 文件读取错误.); / static public static void readWordFormFile(Set s, File f) if (s= null | f= null) return; BufferedReader br; String str; try br = new BufferedReade
26、r( new FileReader(f); while (str = br.readLine() != null) s.add(str.trim(); br.close(); catch (Exception e) public static String readTextFormFile(File f) if (f= null) return null; StringBuffer bf = new StringBuffer(); BufferedReader br; String str; try br = new BufferedReader( new FileReader(f); whi
27、le (str = br.readLine() != null) bf.append(str); bf.append(n); br.close(); return bf.toString(); catch (Exception e) return null; 5 总结和展望经过此次课程设计实践,我初步完成了一个相关敏感词汇分析小应用程序。在课程设计过程中,我发觉了我在Java编程方便存在不足可部分收获。最大收获就是自己经过学习,将全部基础知识进行了一次大综合练习,把自己之前所学内容穿到了一起,形成了一个知识体系。对于此次课程设计结果,因为时间关系,同时也存在着部分功效上不完善,比如次程序还能够在此基础上,开发出自动删除或屏蔽敏感词汇,开发出词汇自动统计功效,从而利用到更广泛领域上去。总体来说,此次课程设计意义重大,让我领悟了Java编程专题思想和方法技巧,对我学习是一个提升,也对我未来从事编程方面研究起到了基础性作用。参考文件1 刘万军,郑少京,王松波.Java6程序设计实践教程M. 北京:清华大学出版社,.5 2 Bruce Eckel.Java编程思想M.第二版,北京,高等教育出版社,.4 3 Cay S.Horstmann,Java关键技术J,第八版,电子工业出版社,.6成绩评定成绩 老师签字