无法读取Azure上位于应用程序资源文件夹中的json文件

时间:2019-03-06 18:34:05

标签: java spring azure spring-boot

我有Spring Boot应用程序。我正在尝试读取资源文件夹中的json文件(使用类加载器)。我已经将我的应用程序部署在azure上,它给了我错误,不存在这样的文件,并且在我打印路径时,它给了我null。

1 个答案:

答案 0 :(得分:0)

我试图创建一个简单的Maven项目来解决您的问题。

我的源代码结构如下。

simpleMavenProj
   |-src/main/java/Hello.java
   |-src/main/resources/hello.json

Hello.java的内容如下。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class Hello {

    public static void main(String[] args) throws IOException {
        InputStream resourceInputStream = null;
        URL resourceURL = Hello.class.getClassLoader().getResource("resources/hello.json");
        if(resourceURL == null) {
            System.out.println("Get the InputStream of hello.json in IDE");
            resourceInputStream = new FileInputStream(Hello.class.getClassLoader().getResource("").getPath()+"../../src/main/resources/hello.json");
        } else {
            System.out.println("Get the InputStream of hello.json from runnable jar");
            resourceInputStream = Hello.class.getClassLoader().getResourceAsStream("resources/hello.json");
        }
        System.out.println();
        StringBuilder builder = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(resourceInputStream));
        String line = null;
        while((line = br.readLine()) != null) {
            builder.append(line+"\n");
        }
        br.close();
        System.out.println(builder.toString());
    }
}

还有hello.json

{
    "hello":"world"
}

如果在IDE中进行开发,请运行代码,结果为:

Get the InputStream of hello.json in IDE

{
    "hello":"world"
}

否则将生成可运行的jar文件,然后通过java -jar simpleMavenProj.jar运行jar文件,结果是:

Get the InputStream of hello.json from runnable jar

{
        "hello":"world"
}

希望有帮助。如有任何疑问,请随时告诉我。