Jar包启动通过ClassPathResource获取不到文件路径问题

项目目录结构

在这里插入图片描述

maven项目resources目录也是会被编译到classpath下的。

      ClassPathResource resource = new ClassPathResource("/map/map.properties");
        InputStream inputStream = resource.getInputStream();
        System.out.println("inputStream.available() = " + inputStream.available());
        System.out.println("resource.getFile().getAbsolutePath() = " +    	resource.getFile().getAbsolutePath());

如果是使用idea进行本地开发时,是可以获取到classpath下的资源的路径的,因为是读取的磁盘上的真正的那个文件。

在这里插入图片描述

但是如果将项目打包成一个jar包后,再获取map.properties是获取不到的,对于操作系统来说最多只能读取到jar包,而不能再继续读取jar包里面的文件了,如果继续读取,只能交给jvm去读了,此时能读取到二进制流,而不能获取到路径。可通过以下几种方式获取classpath下的资源。

 ClassPathResource classPathResource = new ClassPathResource("/map/map.properties");
        InputStream cis = classPathResource.getInputStream();
        //获取classpath下第一个/map/map.properties,这个根据jar包的加载先后顺序有关
        InputStream ris = ClassPathResource.class.getClassLoader().getResourceAsStream("/map/map.properties");
        //这个是获取classpath下所有的map/map.properties,在jvm运行时,所有jar都相当于是一个classpath
        Enumeration<URL> resources = ClassPathResource.class.getClassLoader().getResources("/map/map.properties");
        
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值