1. 常规使用-绝对路径
1 2 3 4 5 6 7 8 9 10
| public String fileB() throws IOException { File file = new File("D:/learn/Java/fileRead/b.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); StringBuilder res = new StringBuilder(); String s; while ((s = br.readLine()) != null) { res.append(s); } return res.toString(); }
|
如上面代码所示,在项目开发时使用绝对路径读取文件的内容
2.常规使用-项目相对路径
1 2 3 4 5 6 7 8 9 10 11
| public String fileA() throws IOException { System.out.println(System.getProperty("user.dir")); File file = new File("a.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); StringBuilder res = new StringBuilder(); String s; while ((s = br.readLine()) != null) { res.append(s); } return res.toString(); }
|
如上面代码所示,在开发中,使用相对路径时,读取的是项目根路径;在SpringBoot项目中为src所在的目录,所以对应的文件需要放在项目根目录,可以使用**System.getProperty(“user.dir”)**查看当前运行所在根目录

3.使用jar包运行读取
当项目打包为jar包单独运行时,同样也可以使用**System.getProperty(“user.dir”)**获取到当前jar包运行的根目录
注意:此时根目录并非jar包所在的目录,而是执行java -jar这条命令时,终端所在的目录
所以在项目部署时,一些文件可以放到jar包所在的config目录,然后使用相对路径就可以读取到文件
1 2 3 4 5 6 7 8 9 10 11
| public String fileC() throws IOException { File file = new File("config/c.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); StringBuilder res = new StringBuilder(); String s; while ((s = br.readLine()) != null) { res.append(s); } br.close(); return res.toString(); }
|
4.开发时从resource目录中读取
1 2 3 4 5 6 7 8 9 10 11 12
| public String fileD() throws IOException { String file = Objects.requireNonNull(this.getClass().getClassLoader().getResource("d.txt")) .getFile(); BufferedReader br = new BufferedReader(new FileReader(file)); StringBuilder res = new StringBuilder(); String s; while ((s = br.readLine()) != null) { res.append(s); } br.close(); return res.toString(); }
|
可以将文件放置在项目的resource目录中,其核心是使用**this.getClass().getClassLoader().getResource()**读取文件
注意:this.getClass().getClassLoader().getResource()只能开发时使用,当打包为jar包后运行,会找不到文件
5.打jar包运行时从resource目录中读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public String fileE() throws IOException { InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("e.txt"); BufferedReader br = null; if (resourceAsStream != null) { br = new BufferedReader(new InputStreamReader(resourceAsStream)); } StringBuilder res = new StringBuilder(); String s; while ((s = br.readLine()) != null) { res.append(s); } br.close(); return res.toString(); }
|
最好使用**this.getClass().getClassLoader().getResourceAsStream()**方法读取resource目录下的文件,当使用jar包运行时,依然可以获取到文件