开发一个web应用,已知在某文件里边有某些数据,实现这些数据的查询,删除和添加,此处文件为电脑c盘下桌面上名字叫data1.txt的文件
TXT文档中,源数据为:
其中,名字和专业和班级和方向之间都是一个退格,方向后为换行;
先写一个message类:
package com.it.test;
public class message {
private String name;//
private String major;//
private String classes;//
private String direction;//
/**
* @return the name
*/
public message(String name,String major,String classes,String direction)
{
this.name =name;
this.major=major;
this.classes=classes;
this.direction=direction;
}
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the major
*/
public String getMajor() {
return major;
}
/**
* @param major the major to set
*/
public void setMajor(String major) {
this.major = major;
}
/**
* @return the classes
*/
public String getClasses() {
return classes;
}
/**
* @param classes the classes to set
*/
public void setClasses(String classes) {
this.classes = classes;
}
/**
* @return the direction
*/
public String getDirection() {
return direction;
}
/**
* @param direction the direction to set
*/
public void setDirection(String direction) {
this.direction = direction;
}
}
然后,写一个method类,提供查找,添加删除方法
package com.it.test;
import java.util.*;
import java.io.*;
public class method {
List<message>list=new LinkedList<>();//创建的新list
public void add(String name,String major,String classes,String direction)//添加元素
{
message m=new message(name,major,classes,direction);
list.add(m);
}
public message findname(String name)//按名字查找
{
int i;
for(i=0;i<list.size();i++)
if(list.get(i).getName().equals(name))
return list.get(i);
return null;
//return list.get(i);
//return null;
}
public int deletename(String name)//������ɾ��
{
int i;
for(i=0;i<list.size();i++)
if(list.get(i).getName().equals(name))
{
list.remove(i);//在集合里边删除 该元素
//System.out.println("已删除");
File file=new File("C:\\Users\\Sky\\Desktop\\data1.txt");
if(file.exists())//如果当前文件存在
file.delete();//就删除
if(!file.exists())//如果不存在,就创建一个
{
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileWriter writer;
try
{
writer = new FileWriter("C:\\Users\\Sky\\Desktop\\data1.txt");//选定写入的对象为当前文件夹
for(int j=0;j<list.size();j++)//因为list集合 已经删除掉了需要删除的元素
{//并且,原文件也被删除掉了,所以就重新建一个跟原来名字一样的文件
String help=list.get(j).getName()+"\t"+list.get(j).getMajor()+"\t"+list.get(j).getClasses()+"\t"+list.get(j).getDirection();
writer.write(help);//然后再把集合里边的 元素写进去,就实现了元素删除
writer.write("\r\n");
}
writer.flush();
writer.close();
}
catch(Exception e)
{
}
return 1;
//break;
}
return 0;
}
public void index()//��ѯ������//全部查询
{
if(list.size()==0)
{
System.out.println("空表");
return ;
}
for(int i=0;i<list.size();i++)
System.out.println("姓名"+list.get(i).getName()+" 专业:"+list.get(i).getMajor()+" 班级 :"+list.get(i).getClasses()+" 方向 :"+list.get(i).getDirection());
}
}
然后写一个servlet,作为后台控制:
package com.it.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@SuppressWarnings("serial")
public class Test01 extends HttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
/**
* The doPost method of the servlet. <br>
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
method me=new method();//由于每次跳转use.jsp,就会调用Test01,所以如果文件里边的数据不变,则删除无效
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String pathname="C:\\Users\\Sky\\Desktop\\data1.txt";//list存储为文件里边的数据,如果文件数据不变,则list不会变
File filename=new File(pathname);
InputStreamReader reader=new InputStreamReader(new FileInputStream(filename));
BufferedReader buffer=new BufferedReader(reader);
String line=buffer.readLine();
while(line!=null)
{
//response.getWriter().write(line+"<br>");
String help[]=line.split("\\t");//把文件每行数据按退格分开
if(help.length==4)
me.add(help[0], help[1], help[2], help[3]);//存入list集合
// for(int i=0;i<4;i++)
// {
// response.getWriter().write(help[i]);
// }
line=buffer.readLine();//然后读取下一行
}
buffer.close();
String username=null;
String name=null;
username=request.getParameter("username");
name=request.getParameter("name");
if((username==null||username.trim().isEmpty())&&(name==null||name.trim().isEmpty()))//查询和删除都为空时,显示姓名不能为空
{
request.setAttribute("msg", "姓名不能为空");
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
if(me.findname(username)!=null&&(name==null||name.trim().isEmpty()))//删除为空,查询不为空,并且查询到了
{
request.setAttribute("msg", "姓名 "+me.findname(username).getName()+" 专业"+me.findname(username).getMajor()+" 班级"+me.findname(username).getClasses()+" 方向 :"+me.findname(username).getDirection());
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
if(me.findname(username)==null&&(name==null||name.trim().isEmpty()))//删除为空,查询不为空,没有查询到
{
request.setAttribute("msg", "("+username+")"+"查无此人");
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
if((username==null||username.trim().isEmpty())&&(name==null||name.trim().isEmpty()))//无效代码,请忽略
{
request.setAttribute("msg", "姓名不能为空");
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
int flag=me.deletename(name);//表示删除结果
if((username==null||username.trim().isEmpty())&&flag==0)//查询为空,删除不为空,删除失败
{
request.setAttribute("msg", "("+name+")"+"查无此人");
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
if((username==null||username.trim().isEmpty())&&flag==1)//查询为空,删除不为空,删除成功
{
request.setAttribute("msg", "("+name+")"+"已删除");
request.getRequestDispatcher("/use.jsp").forward(request, response);
return ;
}
}
}
最后,写出主要的jsp去调用servlet:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'use.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<div>
<h1>欢迎使用</h1>
<form action="servlet/Test01" method="post">
<table>
<tr>
<td width="66" align="right"><font size="3">查询:</font></td><td colspan="2"><input type="text" name="username" value="${username }" style="width:200;height:25;"/></td>
</tr>
<tr>
<td width="66" align="right"><font size="3">删除:</font></td><td colspan="2"><input type="text" name="name" value="${name }" style="width:200;height:25;"/></td>
</tr>
<tr><td colspan="3" align="center"><input type="submit" value="提交" style="width:130;height:30;"/></td></tr>
</table>
</form>
<font color="red" size="2"> ${msg }</font>
</div>
</center>
</body>
</html>
在tomcat上测试,结果为:
按照文件给的数据,查询"赵仕魁",得到:
然后删除"赵仕魁"
再查询“赵仕魁”:
最后再看文件里边的数据:
赵仕魁已经被删除了!
由于没有接数据库,并且不会用java对txt文件进行数据修改,用了一个不好的方法,先存到list里边,删除元素时,把文件也删除掉,然后建一个跟原文件名字一样的文件,由于需要删除的元素已经被list给删除了,然后按照list里边的元素,一个一个写到文件里边,再查询时,文件就没有删除过的元素了。