zoukankan      html  css  js  c++  java
  • Java实现的词频统计——Web迁移

      本次将原本控制台工程迁移到了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     
    5     private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; 
    6     private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; 
    7     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 
    17         String uploadPath = "D:\Project\workspace" + File.separator + UPLOAD_DIRECTORY;
    18 
    19         // 如果目录不存在则创建
    20         File uploadDir = new File(uploadPath);
    21         if (!uploadDir.exists()) {
    22             uploadDir.mkdir();
    23         }
    24         
    25 
    26         try {
    27             // 解析请求的内容提取文件数据
    28             List<FileItem> formItems = upload.parseRequest(request);
    29 
    30             if (formItems != null && formItems.size() > 0) {
    31                 // 迭代表单数据
    32                 String path = "";
    33                 for (FileItem item : formItems) {
    34                     if (!item.isFormField()) {
    35                         String fileName = new File(item.getName()).getName();
    36                         String filePath = uploadPath + File.separator + fileName;
    37                         File storeFile = new File(filePath);
    38                         // 保存文件到硬盘
    39                         item.write(storeFile);
    40                         request.setAttribute("message", "文件上传成功!");
    41                         path = filePath;
    42                     }else{
    43                         if (item.getString() == null) {
    44                             new FileProccessing(path);
    45                         } else if(item.getString().isEmpty()){
    46                             new FileProccessing(path);
    47                         }else{
    48                             new FileProccessing(path, 4096, item.getString());
    49                         }
    50                     }
    51                 }
    52             }
    53         } catch (Exception ex) {
    54             request.setAttribute("message", "Error: " + ex.getMessage());
    55         }

        跳转页面

          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:ProjectworkspaceCountWebResult.txt">下载Result文件</a>
    16     <%} %>
    17     <br />

    运行结果:

      1.文件上传界面:

      

      

      2.上传结果页面:

      

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

      

      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

      

      

  • 相关阅读:
    如何发现需求
    测试linux和window下 jdk最大能使用多大内存
    java获取汉字的拼音 简单版
    oracle一条sql执行导入sql文件
    oracle使用闪回功能恢复删除的表数据
    linux环境变量配置
    有两张表;使用SQL查询,查询所有的客户订单日期最新的前五条订单记录。 糖不苦
    jQuery作业 点击出弹框 糖不苦
    #{}和${}的区别是什么? 糖不苦
    在html页面中如何使用jQuery? 糖不苦
  • 原文地址:https://www.cnblogs.com/regretless/p/5951132.html
Copyright © 2011-2022 走看看