有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用类。要在其中加载文件的getResource()。罐子

我的java项目中有以下目录结构:

enter image description here

这个项目由Maven管理,当打包时,所有资源都放在一个.jar文件中
Utils.java中,我正在加载car.jpg,由于纹理文件位于类路径上,我使用以下方法来获取该文件的句柄:

URL url = Utils.class.getResource("/textures/car.jpg");

在获取对类路径上文件的引用时,我看到了很多关于使用哪种方法的困惑
使用class.getResource()是正确的方法吗?或者class.getResourceAsStream()有什么好处吗


共 (1) 个答案

  1. # 1 楼答案

    尽可能远离getResource()。尽可能选择getResourceAsStream()

    这个规则背后的主要原因是,资源的新URL(URL.toString())经常以完全意外的方式中断,这取决于提供原始URL的类加载器

    与乍一看不一样的是,两个具有相同字符串表示形式的URL被视为不同的,这取决于它们的构造方式。对于标准化协议的URL来说,这不是问题。但它是由类加载器生成的URL;类加载器可以为您提供这样构造的URL:

     new URL(URL context, String spec, URLStreamHandler handler)
    

    其中,类加载器指定自己的URLStreamHandler。当这样的URL被转换为字符串时,处理程序信息就会丢失,并且无法恢复。然后你就有了一个看似有效的URL,却莫名其妙地无法工作。省事吧:)