介绍5种从resources获取inputStream的方法

在大多数情况下,推荐使用ResourceLoader或ClassPathResource来加载资源文件。

@Component
@Slf4j
public class TestFileService {

    @Autowired
    private ResourceLoader resourceLoader;

    @PostConstruct
    public void testInputStream() throws IOException {

        /*
         * 使用ClassLoader.getResourceAsStream()方法:
         * 通过类加载器获取资源文件的输入流。
         * 方法接受一个资源文件路径参数,返回一个InputStream对象。
         * 注意:该方法返回的资源文件路径是相对于类加载器的根路径,对于resources目录下的文件,通常不需要加前缀。
         */
        InputStream inputStream1 = this.getClass().getClassLoader().getResourceAsStream("test_files/test_file.txt");

        /*
         * 使用Class.getResourceAsStream()方法:
         * 通过Class类的getResourceAsStream()方法读取资源文件。
         * 方法同样接受一个资源文件路径参数,返回一个InputStream对象。
         * 注意:该方法返回的资源文件路径是相对于当前类的路径,因此对于resources目录下的文件,需要在文件名前加上“/”前缀。
         */
        InputStream inputStream2 = this.getClass().getResourceAsStream("/test_files/test_file.txt");

        /*
         * 使用ResourceLoader加载文件:
         * ResourceLoader是Spring框架提供的一个接口,用于加载资源文件。
         * 可以在类中注入ResourceLoader对象,并使用其getResource()方法获取资源文件的Resource对象,然后调用getInputStream()方法获取输入流。
         * 注意:传入资源文件的相对路径可加可不加“/”前缀
         */
        Resource resource = resourceLoader.getResource("classpath:test_files/test_file.txt");
        InputStream inputStream3 = resource.getInputStream();

        /*
         * 使用ClassPathResource加载文件:
         * ClassPathResource是Spring框架提供的一个类,用于从类路径下查找资源文件。
         * 可以直接创建ClassPathResource对象,并传入资源文件的相对路径【文件名前可加可不加“/”前缀】,然后调用getInputStream()方法获取输入流。
         */
        ClassPathResource classPathResource1 = new ClassPathResource("test_files/test_file.txt");
        ClassPathResource classPathResource2 = new ClassPathResource("/test_files/test_file.txt");
        InputStream inputStream4 = classPathResource1.getInputStream();

        /*
         * 使用ResourceUtils加载文件:
         * ResourceUtils是Spring提供的一个工具类,用于加载资源文件。
         * 可以使用ResourceUtils.getFile()方法来获取文件对象,但需要注意该方法只适用于本地文件系统和JAR文件,对于WAR文件或其他类型的文件可能无法正常工作。
         * 注意:传入资源文件的相对路径不加“/”前缀
         */
        File file1 = ResourceUtils.getFile("classpath:test_files/test_file.txt");
        InputStream inputStream5 = Files.newInputStream(file1.toPath());

        log.info("1");
    }
}
posted @   南翔技校毕业后  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示