添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
博客放养了一年多,今天迁移到腾讯云了,不得不说腾讯的无忧计划是真的香,以后再也不搬家了。迁移过来后,主题出了不少问题,索性从v6.0升级到最新版v8.2.1了,开始还担心又要重新配置主题了,一堆东西挺闹心的。后面发现无需修改任何配置,上传新版后直接无缝升级,以前7.0升级的时候会出现各种问题,干脆降回去了。看来后期版本,作者开始重视版本升级的用户体验了,所有配置自动兼容,很赞!
September 29th, 2021 at 09:03 pm
最近这雨是包月了啊,还是连续包月那种
July 5th, 2020 at 08:06 pm
端午节后的第一周比平常多了一天,不巧的是这一周的我还特别的闲,更加让我感觉这一周特别长。上班又不能老划水以浪费时间,所以利用这段时间进行自我提升。只是最近发生的事情比较多,又是刚收假,所以进入深度学习状态的速度比较慢,效率不高。学习还是一件比较吃自制力的事情,加油吧。
July 2nd, 2020 at 09:56 am

夜月归途

关于SpringBoot使用this.class.getResource()获取文件时遇到的坑
关于SpringBoot使用this.class.getResource()获取文件时遇(cu)到(xin)的(d...
扫描右侧二维码阅读全文
23
2019/02

关于SpringBoot使用this.class.getResource()获取文件时遇到的坑

  • 博主:
  • 发布时间:
  • 12751次浏览
  • 1352字数
  • 分类: 技能学习
  • 关于SpringBoot使用this.class.getResource()获取文件时遇(cu)到(xin)的(da)坑(yi),这里记录一下。

    在使用Springboot开发本博客系统时,在resource目录下增加了一些配置文件,代码中需要读取这些文件,故使用了 this.getClass().getResource() 获取这些文件。

        String path = this.class.getResource("/config/xxx.properties").getPath();
        FileInputStream fis = new FileInputStream(new File(path));

    在IDE工具中开发及Debug时一切都正常,但是打成Jar包发布到线上时就会出现java.io.FileNotFoundException

    报错很直白的告诉我们是因为文件不存在,仔细检查了文件及代码,而且也确认在IDE工具中一切正常,而且也将打成的Jar包解压确认文件确实打包进去了。

    那么为什么会导致打成Jar包就会找不到文件呢?后面仔细查看具体的报错信息:

        java.io.FileNotFoundException: file:\E:\repo\guitu-blog\target\guitu-blog-1.0.0-SNAPSHOT.jar!\BOOT-INF\classes!\config\xxx.properties

    检查路径发现在磁盘确实不存在这样一条路径,因为路径从 ...\guitu-blog-1.0.0-SNAPSHOT.jar\... 开始,后面的文件路径都是打到Jar包中的,磁盘没有后面 ...\BOOT-INF\classes!\config\xxx\xxx.properties 这样的目录;

    在Jar包中的文件在磁盘是没有实际路径的,所以通过这时候可以通过 this.getClass().getResource() 无法获取文件。
    此时可以通过 this.getClass().getResourceAsStream("/config/xxx.properties") 能够正常获取到文件流。

        InputStream is = ComController.class.getResourceAsStream("/config/xxx.properties");

    同理 this.getClass().getClassLoader().getResourceAsStream("config/xxx.properties") 也能够获取到文件流。

    注意这两种方式获取流时传入的参数,一个以 "/" 开头,一个不是以 "/" ,具体的区别请查阅我的另一篇博客 关于获取资源文件,Class.getResource 和 ClassLoader.getResource 的区别

    关于SpringBoot使用this.class.getResource()获取文件时遇到的坑

    关于SpringBoot使用this.class.getResource()获取文件时遇(cu)到(xin)的(da)坑(yi),这里记录一下。

    在使用Springboot开发本博客系统时,在resource目录下增加了一些配置文件,代码中需要读取这些文件,故使用了 this.getClass().getResource() 获取这些文件。

        String path = this.class.getResource("/config/xxx.properties").getPath();
        FileInputStream fis = new FileInputStream(new File(path));

    在IDE工具中开发及Debug时一切都正常,但是打成Jar包发布到线上时就会出现java.io.FileNotFoundException

    报错很直白的告诉我们是因为文件不存在,仔细检查了文件及代码,而且也确认在IDE工具中一切正常,而且也将打成的Jar包解压确认文件确实打包进去了。

    那么为什么会导致打成Jar包就会找不到文件呢?后面仔细查看具体的报错信息:

        java.io.FileNotFoundException: file:\E:\repo\guitu-blog\target\guitu-blog-1.0.0-SNAPSHOT.jar!\BOOT-INF\classes!\config\xxx.properties

    检查路径发现在磁盘确实不存在这样一条路径,因为路径从 ...\guitu-blog-1.0.0-SNAPSHOT.jar\... 开始,后面的文件路径都是打到Jar包中的,磁盘没有后面 ...\BOOT-INF\classes!\config\xxx\xxx.properties 这样的目录;

    在Jar包中的文件在磁盘是没有实际路径的,所以通过这时候可以通过 this.getClass().getResource() 无法获取文件。
    此时可以通过 this.getClass().getResourceAsStream("/config/xxx.properties") 能够正常获取到文件流。

        InputStream is = ComController.class.getResourceAsStream("/config/xxx.properties");

    同理 this.getClass().getClassLoader().getResourceAsStream("config/xxx.properties") 也能够获取到文件流。

    注意这两种方式获取流时传入的参数,一个以 "/" 开头,一个不是以 "/" ,具体的区别请查阅我的另一篇博客 关于获取资源文件,Class.getResource 和 ClassLoader.getResource 的区别