同样的使用 相对路径 访问Resource资源的代码Eclipse运行没毛病, IDEA却频繁报错, 不如试试这一步 分析+解决方案

开局先吐槽

IDEA有毒, 真的 以前的我也是月食的钟爱党, 也曾和他们一样各种鄙视靠各种快捷键吃饭的IDEA程序员(莫着急, 我还有话说, 说完再打… ) 士大夫,没想到,打脸来的总是措不及防,最近有个项目不得已移植到IDEA,那一刻我承认我堕落了,我愧对我党,真香啊…

为啥说它有毒, 从标题你就看出来了, 同样的使用 相对路径 访问Resource资源的代码Eclipse运行没毛病, IDEA却频繁报错上代码瞧瞧 这有毒的IDEA

public class PropertiesUtil{
   private static Properties properties=new Properties();
   
   static {
      InputStream inputStream=null;
         try {
        
         //inputStream = new FileInputStream("server.properties"); 和下面效果一样
         inputStream = PropertiesUtil.class.getResourceAsStream("server.properties");
         properties.load(inputStream);
      } catch (IOException e) {
         e.printStackTrace();
         throw new RuntimeException("服务器配置文件出错");
      }finally {
         if(inputStream!=null) {
            try {
               inputStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }  
      }
   }
   
   public static String getValue(String key) {
      return properties.getProperty(key)==null ? "" : properties.getProperty(key);
   }

   public static void main(String[] args) {
      System.out.println(PropertiesUtil.getValue("server.port"));
   }
}

报错分析

首先上面这段代码在eclipse老铁那里 一点毛病也没有, 但是IDEA却出现FileNotFound异常 试过两种方式(注释) 都不行, 无奈找度娘, 发现2种解决方案
但很可惜, 均没有效果, 也给出来参考一下, 可能对于其他情况适用

  • 修改pom.xml
<!-- <resource>

   <directory>src/main/resources</directory>

   <includes>
     <include>**/*.xml</include>
     <include>**/*.properties</include>
   </includes>

 </resource>-->

这种方式后来我才明白适用于web项目, 而我这个是非Web的所以还是不起作用

  • 使用绝对路径 这个肯定是可以的, 但是这就有种和IDEA硬刚的味道, 不好不好

原则把握

后来,我将疑惑转求我的恩师, 以下是原话:

Eclipse的classpath 默认(可以修改)是基于src的, 而IDEA通常是基于Maven风格 而Maven风格classpath默认基于java目录和resources目录

而程序最终的执行的是.class文件 不是.java文件, 因此研究路径的应该研究 字节码所在目录 而不是源码所在目录

看到这段话 不知各位有啥想法吗 我顿时灵光一现 放最终成功代码 仅仅将上面的inpustream获取方式修改一下

inputStream= PropertiesUtil.class.getClassLoader().getResourceAsStream("server.properties");

解释一哈: 既然我们研究的目标现在确定是字节码所在目录, 那么我们要获取其路径下的资源 很明显应该通过类加载器的方式来获取, 因为对于IDEA只有类加载器才可以访问字节码目录,

至此完美解决, 再无异常…


临终来两句

不得不说 我的恩师在指点迷津的这方面 颇有造诣, 每次问他问题 都不会告诉我应该怎么做 而是提供思路, 最终我的解决方案都是来源此, 所以很感谢我的老师, 对我的技术成长有很大的帮助.

哦对了, 各位遇到该问题的童鞋 赶紧试试吧 有问题评论区哦…(回复率101%, 多出的1%是我对你们的爱哦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值