@Component
@Slf4j
public class TestFileService {@Autowiredprivate ResourceLoader resourceLoader;@PostConstructpublic void testInputStream() throws IOException {// 5种从resources获取inputStream的方法// 在大多数情况下,推荐使用ResourceLoader或ClassPathResource来加载资源文件/** 使用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");}
}