如何在Java Server Page Directory中读取TXT文件

时间:2012-03-15 09:13:49

标签: java jsp web

我想创建一个需要读取项目目录中.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>

5 个答案:

答案 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)

尝试从应用程序的根路径找到它。

http://www.java2s.com/Code/Java/JSP/ReadingBinaryData.htm

答案 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会认为这是它的根目录。