getResourceAsStream返回NullpointerException

时间:2016-03-31 16:21:09

标签: java spring-boot inputstream request-mapping

在Spring中,我想让我的浏览器显示图像。图像位于我的主项目中,即

> myproject
   - src
   - target
   - img.png

这意味着img.png位于root中,因此我不提供任何路径但返回NullPointerException。我尝试在src中添加图像,然后将路径更改为src\img.png,但仍然给了NPE。

请注意,这个项目正在使用Maven。

堆栈追踪:

java.lang.NullPointerException: null
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:462) ~[commons-io-2.4.jar:2.4]

以下是我使用的代码:

InputStream in = DataService.class.getResourceAsStream("img.png");

        final HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_PNG);

        result.setData(new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED));

关于此问题的评论标记为关闭:

  

返回   URL对象;如果未找到具有此名称的资源,则为null

即使我尝试将null添加到不同位置,我的代码也会返回img.png

该问题的答案是该文件必须与this位于同一目录中,但在此问题中,即使我将图像添加到类DataService所在的同一位置,它也会不行。

3 个答案:

答案 0 :(得分:1)

使用Maven完成项目设置后,将图像添加到resources文件夹即可。代码没有任何变化:

DataService.class.getClassLoader().getResource("img.png")

答案 1 :(得分:1)

这里的问题是/src可能是类路径的根(它取决于你如何编译项目),因此你应该把img.png放到src文件夹和下面的代码中会工作

DataService.class.getResourceAsStream("img.png");

通常,getResourceAsStream()从类路径的根目录中查找文件。

答案 2 :(得分:0)

你只需做一个小改动,它的getResourceAsStream(&#34; /img.png")不是getResourceAsStream(&#34; img.png&#34;)。

我希望这会有所帮助。