spring boot是当前比较火的一个项目框架,旨在简化spring开发过程,让放更少的精力在繁琐的配置文件上,开发者专注于业务的开发。因此Spring提供了丰富的第三方库以及各种Starters,只需要将它们加入pom文件(或者你用Gradle),就可以使用。
spring boot推荐采用jar包的方式运行,通过java -jar xxx.jar
文件,前提是项目内置了tomcat等服务器。之前使用spring boot做项目的时候,有需求要访问里面的jar里面的文件,然后想当然的通过new File(filepath)来获取文件流。但是通过jar包方式运行的时候发现并不能找到。后来才发现了原因?:new File的方式需要文件本身能够被文件系统所访问到,而打包成jar后,文件系统只能访问到jar,无法访问到里面的内容了。所以要通过别的方法才能访问,下面贴上代码:
public class foo {
//通过spring的ResourceLoader来获取
private final ResourceLoader resourceLoader;
@Autowired
public foo(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
public String readFileInJar() {
StringBuilder sb = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(resourceLoader.getResource("classpath:/static/bar.xml").getInputStream()));
String s;
try {
while ((s = in.readLine()) != null) {
sb.append(s);
if (newline)
sb.append("\n");
}
} finally {
in.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return sb.toString();
}
}