web工程中读取txt文件中二维数组并在页面显示

来源:互联网 发布:福州公司网络管理制员 编辑:程序博客网 时间:2024/05/19 23:10

一,


       如图,web工程要读取的txt文本的格式如图:第一行为标题,也就是关键字。现在要做的就是当在页面输入第一行的一个关键字的时候,能够输出该列的信息。当输入的关键字不在第一行的范围内的时候,出现相关提示信息。而且该二维数组是可扩展的。

    Servlet:

 


 package servlet;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SerchTestServlet extends HttpServlet { 
   

    private static final Stirng ContentType="text/html;charset=utf-8";    //把ContentType设置为常量

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        {

       try{

             doService(request,response);

       }catch(Exception e){

            e.printStackTrace();

       }  

      }  

    public void doPost(HttpServletRequest request, HttpServletResponse response){

       try{

             doService(request,response);

       }catch(Exception e){

            e.printStackTrace();

       }  

}

/*

*Servlet的主方法,响应页面请求,在也面展现请求方法

*/

   public void doService(HttpServletRequest request, HttpServletResponse response){

         request.setCharacterEncoding("utf-8");

        String pName = request.getParameter("name");

        response.setContentType(ContentType);     


      String FileName="\\WEB-INF\\mockData\\info.txt";

      String realPath=this.getServletContext().getRealPath("/")+fileName;//文件路径


     List<Map<String,String>> list=readFile(realPath);//用List<Map<String,String>>的形式存储文本数据

     if(isContainsKey(list,pName)){//判断输入的关键字是否存在于第一行标题之中

          for(  Map<String,String> map:list){//如果存在则在页面展示

             response.getWriter.print("<p>"+map.get(pName)+"</p>");

   }else{//否则,输出错误信息

             response.getWriter().print("<p>抱歉,您输入的关键字不在搜索范围之内</p>");

}

}catch(Exception e){

  e.printStackTrace();

}

    }

//判断输入的关键字是否存在于第一行标题之中

private  boolean isContainsKey(List<Map<String,String>> list,String pName){

if(list.get(0).containsKey(name)){

return true;

}else{

return false;

}

}

//读取文本数据并保存在List<Map<String,String>>中

private List<Map<String,String>> readFile(String FilePath){

File file=new File(FilePath);

List<Map<String,String>> list=new ArrayList<Map<String,String>>();

if(file.exits()){

try{

FileReader  reader=new FileReader(file);

BufferedReader bufferedReader=new BufferedReader(reader);

String line=null;

String keyWords[]=bufferedReader.readerLine().spilt("\\s+");//读取第一行数据

while((line=buffereReader.readLine())!=null){

Map<String,String> map=orderCount(keyWords,line);//读取其它行数据,存于map中

list.add(map);

}

}catch(Exception e)

  e.printStackTrace();

}

      }
return list;

}

//读取其它行数据,存于map中

private Map<String,String> orderContent(String keyWords[],String line){

Map<String,String> map=new HashMap<String,String>();

String [] words=line.spilt("\\s+");

for(int i=0;i<keyWords.length;i++){

map.put(keyWords[i],words[i]);

}

return map;

}

}

顺便贴一下jsp代码:

<%--  20170731  查找测试主页--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title></title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <script language="JavaScript" src="js/jquery-1.4.2.js"></script>    <script type="text/javascript">        $(function () {            $("#search").click(function () {                var name = $("#inp").val();                $("#myText").load("SearchTestServlet", {"name": name});            });        });    </script></head><body><div style="text-align:center">    <input id="inp"/>    <button id="search">查找</button></div><br><br><br><hr><div id="myText" style="text-align:center">    <input type="text" style="height:70px;width:200px"/></div></body></html>

心得:1,最主要的还是数据结构的选取,用List<Map<String,String>>来存储文本数据。使标题和每一行对应。

2,按行读取,按列存储。

    

阅读全文
0 0
原创粉丝点击