java使用类。要在其中加载文件的getResource()。罐子
我的java项目中有以下目录结构:
这个项目由Maven
管理,当打包时,所有资源都放在一个.jar
文件中
在Utils.java
中,我正在加载car.jpg
,由于纹理文件位于类路径上,我使用以下方法来获取该文件的句柄:
URL url = Utils.class.getResource("/textures/car.jpg");
在获取对类路径上文件的引用时,我看到了很多关于使用哪种方法的困惑
使用class.getResource()
是正确的方法吗?或者class.getResourceAsStream()
有什么好处吗
# 1 楼答案
尽可能远离getResource()。尽可能选择getResourceAsStream()
这个规则背后的主要原因是,资源的新URL(URL.toString())经常以完全意外的方式中断,这取决于提供原始URL的类加载器
与乍一看不一样的是,两个具有相同字符串表示形式的URL被视为不同的,这取决于它们的构造方式。对于标准化协议的URL来说,这不是问题。但它是由类加载器生成的URL;类加载器可以为您提供这样构造的URL:
其中,类加载器指定自己的URLStreamHandler。当这样的URL被转换为字符串时,处理程序信息就会丢失,并且无法恢复。然后你就有了一个看似有效的URL,却莫名其妙地无法工作。省事吧:)