getResourceAsStream returns NullpointerException

getResourceAsStream returns NullpointerException

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

> myproject
   - src
   - target
   - img.png

这意味着 img.png 在根目录中,所以我没有提供任何路径,但它 returns 和 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));

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

Returns A URL object or null if no resource with this name is found

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

该问题的答案说该文件必须与 this 在同一目录中,但在这个问题中,即使我将图像添加到 class [=19 的相同位置=] 是,它没有用。

你只需要做一个小的改变,它是 getResourceAsStream("/img.png") 而不是 getResourceAsStream("img.png").

希望对您有所帮助。

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

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

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

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

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