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