我想创建一个需要读取项目目录中.txt
文件的应用。
这是我index.jsp
的代码:
<%@page import="java.io.FileReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Read Text</title>
</head>
<body>
<%
BufferedReader reader = new BufferedReader(new FileReader("aFile.txt"));
StringBuilder sb = new StringBuilder();
String line;
while((line = reader.readLine())!= null){
sb.append(line+"\n");
}
out.println(sb.toString());
%>
</body>
</html>
当我执行上面的代码时,我的浏览器告诉我找不到aFile.txt
。然后,我将aFile.txt
放在与此网页运行相同的目录中(index.jsp
)。
我想知道,我应该写什么来找到aFile.txt
这就是我的问题得到解决的方法。感谢Ahmad hasem
<%@page import="java.io.File"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.net.URL"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Read Text</title>
</head>
<body>
<%
String jspPath = session.getServletContext().getRealPath("/res");
String txtFilePath = jspPath+ "/aFile.txt";
BufferedReader reader = new BufferedReader(new FileReader(txtFilePath));
StringBuilder sb = new StringBuilder();
String line;
while((line = reader.readLine())!= null){
sb.append(line+"\n");
}
out.println(sb.toString());
%>
</body>
</html>
答案 0 :(得分:5)
要获取正在运行的JSP的目录,可以调用以下代码:
String jspPath = session.getServletConfig().getServletContext().getRealPath("/");
此代码假定JSP驻留在Web应用程序的根目录中。然后,您可以将txt文件名附加到jspPath
String txtFilePath = jspPath + java.util.File.separator + "aFile.txt";
答案 1 :(得分:2)
在哪里是jsp文件和文本文件。你把它们放在web-inf文件夹中。请从web-inf中删除txt文件,因为如果你想从web-inf访问txt文件你需要servlet。
使用以下代码获取文本文件的路径。
this
.getServlet()
.getServletContext()
.getRealPath(FOLDER NAME)
.concat(System.getProperty("file.separator")
.concat(FILE NAME));
在文件对象中传递上述代码。
答案 2 :(得分:0)
尝试从应用程序的根路径找到它。
答案 3 :(得分:0)
您不应该假设可以使用文件系统读取文件。它是关于WAR文件是否“爆炸”的部署和实现细节。
假设aFile.txt
位于应用程序的根目录中,您应该能够打开流using the servlet context:
<% java.io.InputStream in = application.getResourceAsStream("/aFile.txt"); %>
还有更合适的方法可以将其他文件内联到JSP中。
JSP包括standard action:
<jsp:include page="aFile.txt" />
JSTL导入代码:
<%-- header --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
....
<c:import url="/aFile.txt" />
我假设此代码是出于教育目的而编写的。没有现代应用程序应包含<% %>
scriptlet。
答案 4 :(得分:0)
根据我的经验,它将从您的网络服务器的根目录中读取。实际上,从您启动Web服务器的目录中。在Tomcat中它将是/ home / mike / tomcat。当然,因为它是从这个目录启动你的java虚拟机而java会认为这是它的根目录。