web工程中讀取txt文件中二維數組並在頁面顯示

一,


       如圖,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,按行讀取,按列存儲。

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章