SpringBoot读取Resources文件
SpringBoot读取文件一般分为两种,一种是获取文件对象(File/URL)另一种是获取文件的流。
方式1: getClass.getResource
private void wayByFile() {try {URL url = this.getClass().getResource("../../../test.txt");String fileName = url.getFile().replaceFirst("/", "");//解决中文目录和文件名乱码问题fileName = URLDecoder.decode(fileName, "utf-8");List<String> content = Files.readAllLines(Paths.get(fileName));System.out.println("方式1 文件内容:" + content);} catch (Exception e) {System.out.println("方式1 错误:" + e);}}
方式2: ResourceUtils类
org.springframework.util.ResourceUtils
private void way2ByFile() {try {File file = ResourceUtils.getFile("classpath:test.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);System.out.println("方式2 文件内容:" + bufferedReader.readLine());} catch (Exception e) {System.out.println("方式2 错误:" + e);}}
方式3: getClass.getResourceAsStream
private void way3ByStream() {try {InputStream fileInputStream = ReadResourceApplication.class.getResourceAsStream("../../../test.txt");InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);System.out.println("方式3 文件内容:" + bufferedReader.readLine());} catch (Exception e) {System.out.println("方式3 错误:" + e);}}
方式4: ClassPathResource类
org.springframework.core.io.ClassPathResource
private void way4ByStream() {try {ClassPathResource classPathResource = new ClassPathResource("test.txt");InputStreamReader inputStreamReader = new InputStreamReader(classPathResource.getInputStream());BufferedReader bufferedReader = new BufferedReader(inputStreamReader);System.out.println("方式4 文件内容:" + bufferedReader.readLine());} catch (Exception e) {System.out.println("方式4 错误:" + e);}}
方式5: Resource接口
结合spring注解,使用org.springframework.core.io.Resource
@Value("test.txt")Resource resource;private void way5ByStream() {try {InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());BufferedReader bufferedReader = new BufferedReader(inputStreamReader);System.out.println("方式5 文件内容:" + bufferedReader.readLine());} catch (Exception e) {System.out.println("方式5 错误:" + e);}}
方式6:ResourceLoader接口
结合spring注解,使用org.springframework.core.io.ResourceLoader
@AutowiredResourceLoader resourceLoader;private void way6ByStream() {try {InputStreamReader inputStreamReader = new InputStreamReader(resourceLoader.getResource("test.txt").getInputStream());BufferedReader bufferedReader = new BufferedReader(inputStreamReader);System.out.println("方式6 文件内容:" + bufferedReader.readLine());} catch (Exception e) {System.out.println("方式6 错误:" + e);}}
总结:
1. 这几种方式在工具中都是可以正常读取到的。
2.当打成war运行时,这几种方式都是可以正常运行的,war会被自动解压成目录然后才运行。
3. 当打成jar时,必须通过流的方式才能正常读取或拷贝文件。方式1和方式2都不能读取到文件,因为文件都在jar包中,没有一个实际的路径,所以会提示文件不存在。