gpt4 book ai didi

java - 在servlet中读取和写入文本文件

转载 作者:行者123 更新时间:2023-11-30 04:05:55 25 4
gpt4 key购买 nike

我想从 jsp 页面写入一个字符串并将其存储在 servlet 中。如果用户再次输入相同的字符串,servlet 会从文本文件中读取该字符串(如果存在),则表明该字符串已被存储,如果不存在,则将该字符串写入文本文件中。

这是我的 jsp 代码,其中我得到名为“起始出价”的字符串

       <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<form action="mona.java" method="POST">
Name:<input type="text" name="Name"><br>
Email:<input type="text" name="Email"><br>
Item Name:<input type="text" name="Item Name"><br>
Item Description:<input type="text" name="Item Description"><br>
Starting Bid Price:<input type="text" name="Starting bid Price"><br>
<input type="submit" value="submit">
</form>
</body>
</html>

这是我的 servlet 代码。

import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String s1 = request.getParameter("Name");
String s2 = request.getParameter("Email");
String s3 = request.getParameter("Item Name");
String s4 = request.getParameter("Item Description");
String s5 = request.getParameter("Starting bid Price");

try{

File file = new File("c:/example/filedata.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String temp = bufferedReader.readLine();
while (temp != null) {
if(s5.equals(temp))
{
out.println("file already exist");
//fileReader.close();
}
else
{
PrintWriter fileWriter = new PrintWriter(new
FileOutputStream("c:/example/filedata.txt",true));
fileWriter.println( s5 );
out.println("file saved");
fileWriter.close();
}
fileReader.close();
}
}
catch(FileNotFoundException fnfe) {

}
finally{


}

}

最佳答案

你的问题有点不清楚,但如果我理解得好的话,你只需要让这段代码工作即可。

嗯,第一个问题是

String temp = bufferedReader.readLine();
while (temp != null) {

您的代码仅读取文件中的第一行,如果它不为空,则您将在 while 循环中无休止地处理代码。

应该是这样的:

String temp = null;
while ((temp = bufferedReader.readLine()) != null) {
// do your stuff here.

另一个可能的问题:

out.println("file already exist");

如果这应该在控制台上打印文本,它应该是

System.out.println("file already exist");

建议:在处理文件等资源时,您应该在finally block 中关闭流/读取器,因为如果在资源关闭之前发生异常,资源将保持打开状态。

最后还有一个意见。我个人不会将文件处理放在servlet中,它应该放在一些业务逻辑类中。然后我会从 servlet 第一个方法调用来测试文件是否包含特定字符串,如果没有,我会调用另一个方法,该方法会将新行追加到现有文件中。

如果您需要我的答案中未涵盖的其他内容,请详细说明。希望对您有所帮助。

编辑我还注意到一件事。当您在文件中找到匹配项时,您应该终止 while 循环(return 或 break),或者更好的是,在循环之前将 boolean 变量定义为 false,如果您在文件中找到匹配项,请将其设置为 true 并中断循环。 while 循环结束后,测试变量是否为 true,如果不是,则将您的行追加到文件中(不在 while 循环中)。

编辑2是的,就是我上面提到的问题。

String temp = bufferedReader.readLine();
while (temp != null) {

如果文件的第一行不为空,您将无休止地处理循环。

稍微修改一下你的代码,我建议如下:

 boolean found = false;
File file = new File("c:/example/filedata.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((temp = bufferedReader.readLine()) != null) {
if(s5.equals(temp)) {
System.out.println("file already exist");
found = true;
break;
}
}
if (!found){
PrintWriter fileWriter = new PrintWriter(new
FileOutputStream("c:/example/filedata.txt",true));
fileWriter.println( s5 );
System.out.println("file saved");
}

关于java - 在servlet中读取和写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com