【BlueBlink】Java中Maven项目资源文件引入问题

Java中Maven项目资源文件引入问题

前言

你好! 这是一篇关于Maven中引入资源文件的探讨文章, 写这篇文章的初心是为了记录昨天我写的一个项目中遇到的问题。目前本人还在学习阶段, 如有不足还请多多指正, 谢谢

问题

项目引入了几张图片文件, 但是绝对路径换个电脑肯定不好使了, 于是我用了相对路径, 但是发现打包后图片没有读取到
我打包的形式是带dependencies的形式, (我打算打一包全家福 就一个文件方便嘛)
打包一开始我把resources文件夹下的文件都打包进了jar, 这一个jar里包含了运行的全部需要的内容呀

然而, 资源文件并没有获取到, 这是为什么?

讨论

经过简单测试发现, 打包后的jar包运行时的地址没办法获取到jar包内的文件
因为打包后资源文件包含进了包内, 所以获取不到
考虑到这一点, 我决定将资源文件不打包
而是和jar包放在一个文件夹里就行了

maven编译后, 类文件和资源文件存储在同一个文件夹
maven打包后, Jar包和资源文件也放在同一个文件夹

按照上面的思路, 可以保证IDE中和导出后的jar包运行时都能获取到资源文件, 问题就解决啦

解决方案

第一步

在 src->main->java 文件夹下新建一个包PathPKG 包里新建一个类FilePath
在这个位置建包就行, 建"包内包"之类没试过

package PathPKG;

public class FilePath {
    String s1;
    public FilePath(){
        打包后用来获取jar包的文件目录 / 没打包在IDE里编译后用来获取class文件目录
        s1 = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
    }
    public String filePath(String path) {
        转码
        try{s1 = java.net.URLDecoder.decode(s1,"utf-8"); }catch(Exception e){ e.getStackTrace(); }
        去文件名末尾得到文件夹的目录位置
        while(s1.charAt(s1.length()-1) != '/') {
            s1 = s1.substring(0, s1.length()-1);
        }
        System.out.println("读取此文件 : " + s1 + path);
        加文件名传回
        return s1 + path;
    }
}





第二步

在需要资源文件的地方定义一个String str然后用这个类给他赋值
比如我要用一个menu.png就照下面这个写
然后在IDE里把menu.png放进src->main->resources文件夹里
导出jar包后把menu.png和jar包放在一个文件夹里

String str = new FilePath().filePath("menu.png");
接下来就可以用这个str当文件url地址了,


比如我新建一个ImageIcon对象
ImageIcon icon = new ImageIcon(new FilePath().filePath("menu.png"));

大概就是这些内容
之所以放弃了获取包内的资源文件, 是因为我没找到合适的方法, 也有另一方面原因
包外的资源文件可以随意替换啊, 真的很方便!!!在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值