zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    SpringCloud(四)GateWay网关
    C++中的间接宏函数
    一个C++引用库的头文件预编译陷阱
    谈谈C++中的数据对齐
    在C++中实现aligned_malloc
    WPF中的DesignerProperties
    在.NET 6中使用DateOnly和TimeOnly
    在 Ubuntu 上安装 .NET SDK 或 .NET 运行时
    Microsoft Build 2021第二天
    Microsoft Build 2021大会开始后,Develop Blog一系列更新
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7602011.html
Copyright © 2011-2022 走看看