【问题标题】:Deployed WAR can't access a file已部署的 WAR 无法访问文件
【发布时间】:2020-07-05 18:55:11
【问题描述】:

我有一个 spring 应用程序,我正在尝试使用以下代码访问一个 json 文件:

    try (FileReader reader = new FileReader("parameters.json")) {
        Object obj = jsonParser.parse(reader);
        parameterList = (JSONArray) obj;
    }

我已将 parameter.json 文件放在项目文件夹中,并通过 rest api 从 angular 应用程序访问文件数据,当我在本地计算机上运行应用程序时效果很好,但是当我部署在tomcat上的war文件,我的应用程序无法加载该文件,我应该将parameter.json文件放在tomcat上的其他地方还是最好的解决方案。

【问题讨论】:

  • 您的项目文件夹中的哪里有 parameter.json?
  • 您的代码显示parameters.json,而您的描述显示parameter.json。也许是错字?

标签: java spring tomcat war


【解决方案1】:

您的问题表明您正在尝试访问名为 parameter.json 的文件,而您的代码摘录显示 parameters.json。也许这种差异表明您的源代码中有错字?

如果没有,有多种方法可以从 Spring 中的类路径访问文件,每种方法的第一步都是确保文件位于项目的 src/main/resources 目录中。

然后您可以使用 Spring 实用程序类 ClassPathResourceResourceLoaderResourceUtils 之一来访问该文件。不过,最简单的方法可能是将您的属性放在 .properties 文件中(默认文件名 application.properties)并使用 Spring 的 @Value 注释访问这些值:

@Value("${some.value.in.the.file}")
private String myValue;

您也可以通过@PropertySource 使用其他文件名:

@Configuration
@PropertySource(value = {"classpath:application.properties", 
    "classpath:other.properties"})
public class MyClass {

    @Value("${some.value.in.the.file}")
    private String myValue;

    ...
}

【讨论】:

    【解决方案2】:

    确保您的 parameters.josn 文件名在代码中完全相同。 将您的 parameters.json 文件移动到资源文件夹中,然后使用带有文件名的类路径。

     try (FileReader reader = new FileReader("classpath:parameters.json")) {
       Object obj = jsonParser.parse(reader);
       parameterList = (JSONArray) obj;
     }
    

    【讨论】:

    • 嗨,我如何在资源文件夹中写入文件
    • 当应用程序打包到 WAR 时,我可以修改资源文件夹中的文件吗
    • 您应该为此目的使用外部文件。你不能在运行时修改 war/jar。
    【解决方案3】:

    尝试将文件放在 spring 项目中的资源文件夹下。您应该能够从该位置访问该文件。

    【讨论】:

    • 当应用程序打包到 WAR 中时,我可以修改资源文件夹中的文件吗
    【解决方案4】:

    FileReader 正在寻找一个完整的文件系统,就像您计算机上的文件系统一样,但是当您的 WAR 被部署时,没有一个,因此您必须使用不同的方法。您可以像这样直接从 src/main/resources 文件夹中获取文件

    InputStream inputStream = getClass().getResourceAsStream("/parameters.json");
    

    【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2017-04-04
    • 2022-06-15
    • 2018-09-18
    • 2014-02-01
    • 2017-08-29
    • 2012-09-28
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多