已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验2:软件体系结构风格实现一、实验目的1)初步了解不同的体系结构风格2)掌握不同体系结构风格的实现二、实验学时 4学时。三、实验方法根据KWIC的描述,用所熟悉的语言,完成实验内容。四、实验环境Windows7旗舰版 jdk1.6 Eclipse3.7.0五、实验内容2)完成基于管道过滤器风格的KWIC实现六、实验操作步骤1. KWIC描述:KWIC索引系统接受一些行,每行有若干字,每个字由若干字符组成;每行都可以循环移位。重复地把第一个字删除,然后接到行末; KWIC把所有行的各种移位情况按照字母表顺序输出。完成基于管道过滤器风格的KWIC实现Main类package kwic_pipe;import java.io.File;import java.util.Scanner;public class Main public static void main(String args) File infile = new File(e:mykwic_in.txt); File outfile = new File(e:mykwic_out.txt); Scanner inputfile; Scanner outputfile; try inputfile = new Scanner(infile); outputfile = new Scanner(outfile); / 定义三个管道 Pipe pipe1 = new Pipe(); Pipe pipe2 = new Pipe(); Pipe pipe3 = new Pipe(); / 定义四种过滤器 Input input = new Input(infile, pipe1); Shift shift = new Shift(pipe1, pipe2); Output output = new Output(pipe3, outfile); / 启动四种过滤器的线程 input.transform() shift. transform (); output. transform (); / 直接输出结果 System.out.println(- infile -); String str = null; while (inputfile.hasNextLine() str = inputfile.nextLine(); System.out.println(str); System.out.println(input end); Thread.sleep(3000); System.out.println(- outfile -); while (outputfile.hasNextLine() System.out.println(str); inputfile.close(); outputfile.close(); catch (Exception e) e.getMessage(); Filter类package kwic_pipe;import java.io.IOException;public abstract class Filter /定义输入管道 protected Pipe input; /定义输出管道 protected Pipe output; private boolean isStart = false; Filter(Pipe input, Pipe output) this.input = input; this.output = output; / 防止多次调用,调用之后线程开始执行 public void start() if(!isStart) isStart = true; Thread thread = new Thread(); thread.start(); /线程的 run 方法 public void run() try this.transform(); catch (IOException e) e.getMessage(); /将输入数据转换为所需数据并写入输出管道 /由子类实现抽象方法 protected abstract void transform()throws IOException;Pipe类package kwic_pipe;import java.io.IOException;import java.io.PipedReader;import java.io.PipedWriter;import java.io.PrintWriter;import java.util.Scanner;public class Pipe /输入管道 private Scanner pipereader; /输出管道 private PrintWriter pipewriter; public Pipe()PipedWriter pw = new PipedWriter();PipedReader pr = new PipedReader();trypw.connect(pr); catch (IOException e)e.getMessage();pipewriter = new PrintWriter(pw);pipereader = new Scanner(pr); /读入一行数据到管道 /return 读入的数据 public String readerLine() throws IOException return pipereader.nextLine(); /从管道输出一行数据 public void writerLine(String strline) throws IOException pipewriter.println(strline); /将读管道关闭,调用该方法后,不能再从管道中读数据 /如不能关闭则抛出异 public void closeReader() throws IOException pipereader.close(); /先刷新数据,在将写管道关闭,调用该方法后,不能向管道中写数据 /如不能关闭则抛出异常 public void closeWriter() throws IOException pipewriter.flush(); pipewriter.close(); Alphabetizer类 package kwic_pipe;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;public class Alphabetizer extends Filter private ArrayList al = new ArrayList(); Alphabetizer(Pipe input, Pipe output) super(input, output); /对读入的数据进行排序 protected void transform() throws IOException String templine = null; /读入数据 while(templine = input.readerLine() != null) al.add(templine); /按字母表排序 Collections.sort(al); /对排序后的数据进行输出 for(int i = 0; i al.size(); i+) output.writerLine(al.get(i); input.closeReader(); output.closeWriter(); Shift类package kwic_pipe;import java.io.IOException;import java.util.ArrayList;public class Shift extends Filter /单词的列表 private ArrayList wordlist = new ArrayList(); /重组后的行的列表 private ArrayList linelist = new ArrayList(); Shift(Pipe input, Pipe output) super(input, output); Override protected void transform() throws IOException String templine = ; /读数据 while(templine = input.readerLine() != null) /将数据拆分为不同单词 this.lineSplitWord(templine); /将单词重组为句子 this.recombination(); /输出重组结果 for(int i = 0; i linelist.size(); i+) output.writerLine(linelist.get(i); /清空wordlist、linelist和templine wordlist.clear(); linelist.clear(); templine = ; input.closeReader(); output.closeWriter(); /从一行中提取单词存入单词表中 private void lineSplitWord(String line) String word = ; int i = 0; while(i line.length() if(line.charAt(i) != ) word += line.charAt(i); else wordlist.add(word); i+; private void recombination() for(int j = 0; j wordlist.size(); j+) String templine = ; for (int k = wordlist.size() - 1 - j; k wordlist.size(); k+) templine += wordlist.get(k) + ; for (int m = 0; m wordlist.size() - 1 - j; m+) if(m != wordlist.size() - j - 2) templine += wordlist.get(m) + ; else templine += wordlist.get(m); linelist.add(templine); Input类package kwic_pipe;import java.io.File;import java.io.IOException;import java.util.Scanner;public class Input extends Filter /输入文件的文件名 private File infile; Input(File file, Pipe output) super(null, output); this.infile = file; Override /读取数据 protected void transform() throws IOException Scanner sc = new Scanner(infile); String templine = ; while(templine = sc.nextLine() != null) output.writerLine(templine); output.closeWriter(); sc.close(); Output类package kwic_pipe;import java.io.File;import java.io.IOException;import java.io.PrintWriter;public class Output extends Filter /输出文件的文件名 private File file; Output(Pipe input, File file) super(input, null); t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年设备监理师之质量投资进度控制考试题库200道含答案【突破训练】
- 2026北京师范大学实验华夏女子中学新教师招聘历年真题汇编带答案解析
- 2025河北承德市公安局公开招聘警务辅助人员70名历年真题汇编附答案解析
- 2025河南洛阳国宏资本创业投资有限公司社会招聘7人备考公基题库带答案解析
- 2026中国外汇交易中心(全国银行间同业拆借中心)招聘10人模拟试卷带答案解析
- 2025青岛市生态环保创新中心遴选工作人员30人参考题库附答案解析
- 2025云南昆明市延安医院招聘见习人员13人(第二批)笔试模拟试卷带答案解析
- 2025黑龙江双鸭山市煤炭生产安全管理局招聘急需紧缺事业单位工作人员25人笔试模拟试卷带答案解析
- 2025北京大学先进制造与机器人学院招聘劳动合同制工作人员1人备考公基题库带答案解析
- 2025重庆轮船集团有限公司交运游轮分公司招聘25人笔试备考试卷带答案解析
- 全国课一等奖统编版语文七年级上册《我的白鸽》公开课课件
- 高中物理经典说课课件
- 2025年卫生系统招聘考试(卫生公共基础知识)试题及答案
- 大便与健康的关系
- 深度股权置换与债权债务切割协议
- 药理学 课件 11-4-1 性激素类药及抗生育药
- DB42∕T 2051-2023 文物保护单位保护标志及保护界桩设置规范
- 危重患者的风险评估及护理安全
- 小区监控方案(3篇)
- 主动配电网中分布式电源的虚拟同步发电机控制技术:原理、应用与展望
- T/GXSXFS 006-2021肉牛全混合日粮
评论
0/150
提交评论