本次将原本控制台工程迁移到了web工程上,依旧保留原本控制台的版本。

需求:

  1.把程序迁移到web平台,通过用户上传TXT的方式接收文件;

  2.在页面上给出链接 (如果有封皮、作者、字数、页数等信息更佳)或表格,展示经典英文小说词频统计结果;

  3.支持用户自定义单词分隔符;

  4.词汇范围对比(额外项)。

实现:

  1.迁移至web工程中,支持用户手动选择txt文件上传;

  2.用户提交之后,会在后台运行词频统计函数,并且将统计结果的前10项打印到屏幕上;

  3.统计结果文件Result.txt可以进行下载(此项功能目前仅在本地有效);

  4.用户可自定义分隔符。如想以","、"."分隔则输入",."即可;

  5.由于时间问题,词汇范围对比尚未实现。

代码:

  1.Servlet:用来处理文件上传以及对传输文件进行词频统计,其中文件上传部分使用了apache.commons。

    上传文件的配置

  1. // 上传配置
  2. private static final String UPLOAD_DIRECTORY = "upload";
  3.  
  4. private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3;
  5. private static final int MAX_FILE_SIZE = 1024 * 1024 * 40;
  6. private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50;

    上传文件与处理

  1. // 配置上传参数
  2. DiskFileItemFactory factory = new DiskFileItemFactory();
  3. // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
  4. factory.setSizeThreshold(MEMORY_THRESHOLD);
  5. // 设置临时存储目录
  6. factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
  7.  
  8. ServletFileUpload upload = new ServletFileUpload(factory);
  9.  
  10. // 设置最大文件上传值
  11. upload.setFileSizeMax(MAX_FILE_SIZE);
  12.  
  13. // 设置最大请求值 (包含文件和表单数据)
  14. upload.setSizeMax(MAX_REQUEST_SIZE);
  15.  
  16. String uploadPath = "D:\\Project\\workspace" + File.separator + UPLOAD_DIRECTORY;
  17.  
  18. // 如果目录不存在则创建
  19. File uploadDir = new File(uploadPath);
  20. if (!uploadDir.exists()) {
  21. uploadDir.mkdir();
  22. }
  23.  
  24. try {
  25. // 解析请求的内容提取文件数据
  26. List<FileItem> formItems = upload.parseRequest(request);
  27.  
  28. if (formItems != null && formItems.size() > 0) {
  29. // 迭代表单数据
  30. String path = "";
  31. for (FileItem item : formItems) {
  32. if (!item.isFormField()) {
  33. String fileName = new File(item.getName()).getName();
  34. String filePath = uploadPath + File.separator + fileName;
  35. File storeFile = new File(filePath);
  36. // 保存文件到硬盘
  37. item.write(storeFile);
  38. request.setAttribute("message", "文件上传成功!");
  39. path = filePath;
  40. }else{
  41. if (item.getString() == null) {
  42. new FileProccessing(path);
  43. } else if(item.getString().isEmpty()){
  44. new FileProccessing(path);
  45. }else{
  46. new FileProccessing(path, 4096, item.getString());
  47. }
  48. }
  49. }
  50. }
  51. } catch (Exception ex) {
  52. request.setAttribute("message", "Error: " + ex.getMessage());
  53. }

    跳转页面

  1. getServletContext().getRequestDispatcher("/FileDownload.jsp").forward(request, response);

  2.FileUpload.jsp:定义一个表单,用来提交用户上传的文件以及自定义的分隔符。若用户不填写自定义分隔符,则会用默认的方式分隔字符。

  1. <form method="post" action="CountWeb/UploadServlet"
  2. enctype="multipart/form-data">
  3. 选择一个文件: <input type="file" name="uploadFile" /> (请选择TXT文件)<br />
  4. <br />
  5. 自定义分隔符: <input type="text" name="synstr" value="" /> <br />
  6. <br /> <input type="submit" value="上传" />
  7. </form>

  3.FileDownload.jsp:用来输出用户上传结果以及词频统计结果。

  1. <center>
  2. <h2>${message}</h2>
  3. </center>
  4. <% String juge = (String)request.getAttribute("message");
  5. if(!juge.startsWith("Error")) {%>
  6. 统计结果:<br />
  7. <%FileReader filePrint = new FileReader("D:\\Project\\workspace\\CountWeb\\Result.txt");
  8. BufferedReader br = new BufferedReader(filePrint);
  9. for(int i = 0;i<14;i++){%>
  10. <%=br.readLine()%><br />
  11. <% }
  12. br.close();
  13. filePrint.close();
  14. %>
  15. <a href="D:\Project\workspace\CountWeb\Result.txt">下载Result文件</a>
  16. <%} %>
  17. <br />

运行结果:

  1.文件上传界面:

  

  

  2.上传结果页面:

  

  3.自定义分隔符“,.\n ”输出结果:

  

  4.文件下载:

  

代码地址:

  HTTPS   https://coding.net/u/regretless/p/CountWeb/git

  SSH      git@git.coding.net:regretless/CountWeb.git

  GIT       git://git.coding.net/regretless/CountWeb.git

  

  

Java实现的词频统计——Web迁移的更多相关文章

  1. java词频统计——web版支持

    需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经 ...

  2. 词频统计Web工程

    本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...

  3. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  4. Java实现的词频统计——功能改进

    本次改进是在原有功能需求及代码基础上额外做的修改,保证了原有的基础需求之外添加了新需求的功能. 功能: 1. 小文件输入——从控制台由用户输入到文件中,再对文件进行统计: 2.支持命令行输入英文作品的 ...

  5. Java实现中文词频统计

    昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧! 与英文单词的词频统计不同, 中文的难点在于如何分词, 不过好在有许多优秀的 ...

  6. 词频统计-------------web版本

    要求:把程序迁移到web平台,通过用户上传TXT的方式接收文件.建议(但不强制要求)保留并维护Console版本,有利于测试. 在页面上设置上传的控件,然后在servlet中接受,得到的是一个字节流, ...

  7. Java实现的词频统计

    要求: 1.读取文件: 2.记录出现的词汇及出现频率: 3.按照频率降序排列: 4.输出结果. 概要: 1.读取的文件路径是默认的,为了方便调试,将要统计的文章.段落复制到文本中即可:2.只支持英文: ...

  8. Java实现的词频统计——单元测试

    前言:本次测试过程中发现了几个未知字符,这里将其转化为十六进制码对其加以区分. 1)保存统计结果的Result文件中显示如图: 2)将其复制到eclipse环境下的切分方法StringTokenize ...

  9. 词频统计web

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

随机推荐

  1. 浅谈Vue响应式(数组变异方法)

    很多初使用Vue的同学会发现,在改变数组的值的时候,值确实是改变了,但是视图却无动于衷,果然是因为数组太高冷了吗? 查看官方文档才发现,不是女神太高冷,而是你没用对方法. 看来想让女神自己动,关键得用 ...

  2. 利用Docker设置Node.js

      docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上 ...

  3. wav2midi 音乐旋律提取算法 附可执行demo

    前面提及过,音频指纹算法的思路. 也梳理开源了两个比较经典的算法. https://github.com/cpuimage/shazam https://github.com/cpuimage/Aud ...

  4. Linux入门第一天——基本概述与环境搭建

     一.Linux简介 1.历史 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操 ...

  5. 20155204 2016-2017-2 《Java程序设计》第2周学习总结

    20155204 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 本章主要学习了Java语言的基础语法,基本同C语言逻辑相通,比较着学不算难理解,包括了一些简 ...

  6. 20155211 2016-2017-2 《Java程序设计》第四周学习总结

    20155211 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 这周的内容感觉较上周相比难度增加 教材学习中的问题和解决过程 刚开始学习第六章的时候的时候敲 ...

  7. 20155327 嵌入式C语言课堂补交

    嵌入式C语言 题目要求 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零) 题目分析 分析一:提取插入时间 根据老师上 ...

  8. 【SDOI2014】数表

    题面 题解 不管$a$的限制 我们要求的东西是:($\sigma(x)$是$x$的约数个数和) $ \sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j)) $ 设$f(x)= ...

  9. crontab练习题

    Crontab练习题 每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行存档另存,存储位置为/backups/etc-YYYY-MM-DD.tar.gz 20 3 * * 1-6 /us ...

  10. 写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name,

    写一个 setter 方法用于完成 @property (nonatomic, retain) NSString *name 写一个 setter 方法用于完成 @property (nonatomi ...