Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在servlet中读取文本文件_Java_Regex_Servlets - Fatal编程技术网

Java 在servlet中读取文本文件

Java 在servlet中读取文本文件,java,regex,servlets,Java,Regex,Servlets,在我将读取文本文件的代码包含在servlet程序中之前,该代码一直运行良好。实际上,我需要读取文本文件,并且使用regex模式匹配必须在文本文件中搜索模式。我试了很多,但我想不出来。每次我使用localhost运行它时,它都会直接进入catch,在我放入try catch之前,它会显示错误:500文件找不到“database.txt”,而我的database.txt与我的servlet程序webapps/myprogram/database.txt位于同一位置。我正在使用tomcat8。请帮助我

在我将读取文本文件的代码包含在servlet程序中之前,该代码一直运行良好。实际上,我需要读取文本文件,并且使用regex模式匹配必须在文本文件中搜索模式。我试了很多,但我想不出来。每次我使用localhost运行它时,它都会直接进入catch,在我放入try catch之前,它会显示
错误:500文件找不到“database.txt”
,而我的
database.txt
与我的servlet程序
webapps/myprogram/database.txt
位于同一位置。我正在使用tomcat8。请帮助我为什么它没有获取文件并输入捕获

这是我的servlet程序:

import java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入javax.swing.JOptionPane;
导入java.io.*;
/**
*@author hp
*/
@WebServlet(urlPatterns={“/servlet1})
公共类servlet1扩展了HttpServlet{
@凌驾
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
String txt=request.getParameter(“查询”);
试一试{
FileInputStream fstream=新的FileInputStream(“database.txt”);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
弦斯特林;
if(txt.matches(“谁是(.*)”){
字符串re1=“*”;
字符串re2=“(?:[a-z][a-z]+)”;
字符串re3=“*”;
字符串re4=“(?:[a-z][a-z]+)”;
字符串re5=“*”;
字符串re6=“(?:[a-z][a-z]+)”;
字符串re7=“*”;
字符串re8=“((?:[a-z][a-z]+)”;
字符串re9=“*”;
字符串re10=“(?:[a-z][a-z]+)”;
字符串re11=“*”;
字符串re12=“((?:[a-z][a-z]+)”;
模式p=
Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12,Pattern.CASE不区分大小写| Pattern.DOTALL);
匹配器m=p.Matcher(txt);
if(m.find()){
字符串word1=m.group(1);
stringword2=m.group(2);
字符串z=word2.toString()+“&&&”+word1.toString()+“&&&”+“名称。*”+“\n”;
而((strLine=br.readLine())!=null){
if(模式匹配(z,strLine)){
Pattern=Pattern.compile(“(.*?”);
Matcher Matcher=pattern.Matcher(strLine);
if(matcher.find()){
字符串a=匹配器组(1);
setAttribute(“a”,a);
request.getRequestDispatcher(“/output.jsp”).forward(请求,响应);
}
}
}
}
}否则{
String z=“对不起……查询无效!!!”;
setAttribute(“z”,z);
request.getRequestDispatcher(“/output.jsp”).forward(请求,响应);
}
}捕获(例外e){
抛出新的ServletException(e);
}
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
//processRequest(请求、响应);
doGet(请求、响应);
}
@凌驾
公共字符串getServletInfo(){
返回“简短描述”;
}// 

}
如果您的web根目录中有该文件(我假设您有),那么您必须使用它,它将为您提供文件的实际路径。因此,创建
FileInputStream
的代码应该是

FileInputStream fstream = 
                new FileInputStream(getServletContext().getRealPath("/database.txt"));

我想,如果您将代码格式化以提高可读性,并尝试关注问题,这里的大多数人都会很感激。下面的答案中使用的getRealPath()是一种糟糕的做法。另请参见仅在完全相同的路径上使用
getResourceAsStream()
。我尝试了,但仍然无法工作。它正在进入catch以显示错误,我在webapps\myprograms\n中存储了servlet程序和database.txt。我不知道在何处存储文件有什么问题请帮助@SoumyasreeBiswas请发布您的文件夹结构异常报告说明服务器遇到内部错误,无法满足此请求。异常java.lang.NullPointerException java.io.FileInputStream.(FileInputStream.java:134)java.io.FileInputStream.(FileInputStream.java:97)servlet1.doGet(servlet1.java:54)servlet1.doPost(servlet1.java:604)javax.servlet.http.HttpServlet.service(HttpServlet.java:644)javax.servlet.http.HttpServlet.service(HttpServlet.java:725)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)。“这是我在获取plz帮助时出现的错误!”C>Users>Sony>tomcat>ApacheTomcat 8.0.20>webapps>myprograms>inside my servlet程序和数据库。TXT你能把war上传到哪里并给出链接吗?