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

    技术2022-07-20  69

    目录

    开局先吐槽报错分析原则把握临终来两句

    开局先吐槽

    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%是我对你们的爱哦)

    Processed: 0.009, SQL: 9