Java获取资源的路径

在Java中,有两种路径:

  • 类路径
  • 文件夹路径

使用类路径有两种方式:

  • object.getClass().getResource()返回资源的URL
  • MyClass.class.getResource()返回资源的URL
  • obj.getClass().getResourceAsStream()返回资源流
  • MyClass.class.getResourceAsStream()返回资源流

其实就是说,必须通过class获取资源的URL或者资源的输入流。
而获取class又有两种方式:通过对象实例的getClass()方法或者通过类的静态成员class。

在使用资源文件过程中,有时需要获取资源文件的文件夹路径,也就是以Path的方式获取资源。

于是,容易出错误的地方来了。
我编写一个获取类路径中根目录的方法:

//获取根类路径
public static Path getRootClassPath() {
    String p = Util.class.getResource("/").getPath();
    if (p.contains(":")) p = p.substring(1);
    return Paths.get(p);
}

这样一来,就一步到位获得了根路径的Path。

这样看似完美,实际上却是有瑕疵。
原因在于:类路径和文件路径根本不是一一对应的。
类的根路径对应多个文件夹路径,这多个文件夹路径之间用分号隔开。
所以,你不可能获取类的根路径对应的文件夹路径,而只能获得某个具体资源的文件夹路径

正确姿势如下:

//获取资源的路径
public static Path getResourceAsPath(String resourceName) {
    String p = Util.class.getResource(resourceName).getPath();
    if (p.contains(":")) p = p.substring(1);
    return Paths.get(p);
}

转载于:https://www.cnblogs.com/weiyinfu/p/7602011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值