java读取classpath下的文件路径的多种方式
本文分享几种读取classpath(maven项目即resources下面的文件)下properties文件的方式,其他类型的文件也可以转为InputStream使用直接上代码:public class ClassPathTest {public static void main(String[] args) throws IOException {// resources目录下创建web.pro
·
本文分享几种读取classpath(maven项目即resources下面的文件)下properties文件的方式,其他类型的文件也可以转为InputStream使用
直接上代码:
public class ClassPathTest {
public static void main(String[] args) throws IOException {
// resources目录下创建web.properties文件
// 1、获取classpath根目录下的web.properties,读取properties文件最简单的方式
ResourceBundle properties = ResourceBundle.getBundle("web");
for(String key : properties.keySet()) {
System.out.println(key+"="+properties.getString(key));
}
// 2、使用ClassPathResource
URL classPathUrl = new ClassPathResource("/web.properties").getURL();
UrlResource classPathResource = new UrlResource(classPathUrl);
Properties classPathProperties = PropertiesLoaderUtils.loadProperties(classPathResource);
classPathProperties.forEach((key,value) ->
System.out.println(key+"="+value)
);
// 3、使用Class.getResource,路径支持绝对路径和相对路径
URL classUrl = ClassPathResource.class.getResource("/web.properties");
// 还支持获取InputStream流
InputStream classInputStream = ClassPathResource.class.getResourceAsStream("/web.properties");
UrlResource classResource = new UrlResource(classUrl);
Properties classProperties = PropertiesLoaderUtils.loadProperties(classResource);
classProperties.forEach((key,value) ->
System.out.println(key+"="+value)
);
// 4、使用ClassLoader().getResource,路径最前面不能写/,默认从根目录开始读取
URL classLoaderUrl = ClassPathResource.class.getClassLoader().getResource("web.properties");
// 还支持获取InputStream流
InputStream classLoaderInputStream = ClassPathTest.class.getClassLoader().
getResourceAsStream("web.properties");
UrlResource classLoaderResource = new UrlResource(classLoaderUrl);
Properties classLoaderProperties = PropertiesLoaderUtils.loadProperties(classLoaderResource);
classLoaderProperties.forEach((key,value) ->
System.out.println(key+"="+value)
);
// 5、读取所有jar包下存在某个资源的
// 读取所有jar和当前项目下classpath下存在该路径的资源的URL,springboot自动装配就是这样写的
Enumeration<URL> urls = ClassPathResource.class.getClassLoader().getResources("META-INF/spring.factories");
while (urls.hasMoreElements()) {
UrlResource resource = new UrlResource(urls.nextElement());
Properties resourcesProperties = PropertiesLoaderUtils.loadProperties(resource);
resourcesProperties.forEach((key,value) ->
System.out.println(key+"="+value)
);
}
// 6、基于spring ResourceUtils工具类
URL resourceUtilsUrl = ResourceUtils.getURL("classpath:web.properties");
UrlResource resourceUtilsResource = new UrlResource(resourceUtilsUrl);
Properties resourceUtilsProperties = PropertiesLoaderUtils.loadProperties(resourceUtilsResource);
resourceUtilsProperties.forEach((key,value) ->
System.out.println(key+"="+value)
);
}
}
另外,不要在springboot项目下获取File对象,因为当springboot使用jar的形式启动后,File对象不能读取到jar包里面的文件,所以使用时会报错,需要转换为资源文件的方式,或者流。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)