You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何通过Java代码访问src/main/resources下的图片

Spring Boot读取resources目录下图片的正确方式

你用new File("/images/logo.jpg")失效的核心原因是:打包后的Spring Boot应用中,resources目录下的文件会被嵌入到jar包内部,并非磁盘上的独立文件,而File类只能访问磁盘文件系统中的实体文件,无法读取jar包内的资源。

以下是几种可行的解决方案:

1. 使用ClassPathResource直接读取(通用方案)

通过ClassPathResource从类路径加载资源,支持开发环境和jar包运行环境:

import org.springframework.core.io.ClassPathResource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.InputStream;

// 加载资源并获取输入流
ClassPathResource resource = new ClassPathResource("images/logo.jpg");
try (InputStream inputStream = resource.getInputStream()) {
    // 示例:转成BufferedImage处理
    BufferedImage img = ImageIO.read(inputStream);
    // 后续图片操作逻辑
} catch (Exception e) {
    e.printStackTrace();
}

2. 注入ResourceLoader加载(Spring Bean环境推荐)

如果在Spring管理的Bean(如Service、Controller)中,可以通过注入ResourceLoader来加载资源:

import org.springframework.context.ResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;

@Service
public class ImageService {
    @Autowired
    private ResourceLoader resourceLoader;

    public void processLogo() throws Exception {
        Resource resource = resourceLoader.getResource("classpath:images/logo.jpg");
        try (InputStream inputStream = resource.getInputStream()) {
            // 处理图片逻辑
        }
    }
}

3. 开发环境临时方案(不推荐生产使用)

仅在本地开发时,可以通过类加载器获取资源URL并转成File路径,但打包成jar后会完全失效,仅适合本地调试:

import java.io.File;
import java.net.URL;

URL resourceUrl = getClass().getResource("/images/logo.jpg");
if (resourceUrl != null) {
    File img = new File(resourceUrl.getFile());
    // 仅本地开发时可用
}

总结

优先选择前两种基于输入流的方案,它们能适配所有运行环境;File对象仅适用于磁盘上的物理文件,无法处理jar包内的嵌入式资源。

内容的提问来源于stack exchange,提问作者Luke J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:50:35