在大多数情况下,推荐使用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");
}
}
标签:ClassPathResource,文件,inputStream,获取,资源,test,InputStream,resources,加载
From: https://www.cnblogs.com/jspider/p/18675233