有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSP:具有相对路径的FileReader引发FileNotFoundException

我有一些嵌入的Java代码,我试图在其中加载一个属性文件,该文件与JSP文件位于同一文件夹中:

Properties titles = new Properties();
titles.load(new FileReader("titles.txt"));

上面的代码引发FileNotFoundException

在这种情况下,如何准确地引用“当前文件夹”


共 (3) 个答案

  1. # 1 楼答案

    两件事:

    1. JSP不应该包含java代码。使用mvc框架(SpringMVC、stripes等)作为控制器,并仅将JSP用作视图。这让生活变得容易多了
    2. 您不应该通过web应用程序中的文件系统访问资源文件,请使用classloader accessas suggested by redlab。问题是web应用程序可能会也可能不会在文件系统上解包,这取决于servlet容器

    我看到的主要问题是,您无法对路径是什么做出任何有效的假设,因为您不知道编译的JSP在哪里

    因此:创建一个控制器类,将属性文件放在同一文件夹中,并通过getClass().getClassLoader().getResourceAsStream("titles.txt");从控制器类加载它

  2. # 2 楼答案

    FileReader需要运行java的绝对路径或相对路径。但是对于web应用程序,这通常是通过/etc/init.d/tomcat startup完成的,您不能依赖于当前的目录

    您可以通过调用servletContext.getRealPath("/relative/path/to/file.txt")获得应用程序的绝对路径

    您可以通过调用request.getRequestURL()来获取URL的相对部分

    也就是说,您最好在servlet中使用此代码,而不是JSP-JSP是一种视图技术,不应将逻辑放在其中

  3. # 3 楼答案

    通过使用加载类的类加载器,您可以轻松地获取文件

    getClass().getClassLoader().getResourceAsStream("titles.txt");
    

    然而,我不知道它是否能与JSP一起工作

    您也可以使用ServletContext.getResourceAsStream(""),但是您必须给出完整的webcontent相对路径