介绍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");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~