一,
如图,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,按行读取,按列存储。