【问题标题】:In servlet (web app) how do I know the relative path? [duplicate]在 servlet(网络应用程序)中,我如何知道相对路径? [复制]
【发布时间】:2010-03-16 15:05:49
【问题描述】:

我在 .war 文件的根目录中有一个 jsp 文件。 然后我有一个名为 STUFF 的文件夹。

如何访问 STUFF 中的 read.txt 文件?

/Name_of_war/STUFF/read.txt 是正确的路径吗?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    webapp 的相对路径是/STUFF/read.txt

    可以使用ServletContext#getRealPath() 将相对网络路径转换为绝对本地磁盘文件系统路径。这样,您可以在通常的 java.io 内容中进一步使用它,这些内容实际上对它正在运行的 Web 上下文一无所知。例如

    String relativeWebPath = "/STUFF/read.txt";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    File file = new File(absoluteDiskPath);
    // Do your thing with File.
    

    但是,如果服务器配置为在内存中而不是在磁盘上扩展 WAR,则此方法不起作用。使用getRealPath() 总是有这个警告,不建议在现实世界的应用程序中使用。如果您最终只需要获取该文件的InputStream,您可能会使用FileInputStream,那么您最好使用ServletContext#getResourceAsStream() 直接获取InputStream

    String relativeWebPath = "/STUFF/read.txt";
    InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
    // Do your thing with InputStream.
    

    【讨论】:

    • 我浪费了一天的时间尝试和尝试.. 面对FileNotFoundException,它在本地工作,但不在网络上。很沮丧..但最后我遇到了你的答案并尝试了..效果很棒..非常感谢.. :)
    【解决方案2】:

    如果它位于类路径中,或者您可以将文件夹添加到类路径中, 怎么样: 类加载器 classLoader = Thread.currentThread().getContextClassLoader(); InputStream 输入 = classLoader.getResourceAsStream(fileName);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2012-02-09
      • 2011-04-29
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多