【问题标题】:Java: FileNotFound after deploying to serverJava:部署到服务器后的 FileNotFound
【发布时间】:2017-11-10 15:01:33
【问题描述】:

我有一个问题,我想加载一个 json 文件,该文件位于我的应用程序目录的根文件夹中。所以我做了简单的

       File file = new File("assetlinks.json");

当我在我的本地服务器上运行应用程序时,文件被正确提供 但是当我在线推送时,找不到文件 它会抛出 FileNotFoundException。

请问我在这里错过了什么?

【问题讨论】:

  • 请给出正确的文件路径
  • 该文件位于我的应用程序的根文件夹中,因此我认为它不需要完整的文件路径。它在本地工作。
  • 提供绝对路径
  • 绝对文件路径是相对于我的机器的,我也希望在服务器上使用相同的路径。

标签: java file file-io io


【解决方案1】:

如果是网络应用的根,你需要:

File file = new File(servletRequest
        .getServletContext().getRealPath("/assetlinks.json"));

这会将相对于 Web 应用根目录的 URL(如路径 (/))转换为文件系统文件。

(顺便说一句,子目录可能是一个更好的主意。)

【讨论】:

  • 非常感谢,但我没有使用 servlet 我正在从 api 资源返回文件
  • 您可能知道System.getProperty("user.dir"),或者干脆退出file.getAbsolutePath()。也许缺少权利。
  • 再次感谢,我尝试使用 System.getProperty("user.dir") 获取当前的工作目录,但它在我的系统上返回正确的目录并在服务器上返回一个空字符串。这可能是因为服务器包装在 Kubernetes 容器中吗?
  • 似乎如此。你可以这样做System.setProperty 或以-Duser.dir=开始
  • 好的,谢谢。我已经添加了关于如何解决问题的答案。谢谢你的帮助。
【解决方案2】:

在记录当前工作目录后,我发现它返回了一个空字符串,这是因为应用程序捆绑在一个容器中,要获取资源,这些资源必须显式添加到 docker 文件中,所以只需添加docker的资源解决了这个问题

ADD assetlinks.json assetlinks.json

在我这样做之后,我能够使用

获取文件
File file = new File("assetlinks.json");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多