如果你想访问与你的类在同一个包中的资源,你可以这样做
YourClass.class.getResourceAsStream("path/to/other/resource");
没有前面/
,因为路径是相对于类的包的YourClass
。这在 javadoc 中进行了解释Class#getResource(String)
在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:
如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。否则,绝对名称的格式如下:modified_package_name/name
其中 modified_package_name 是此对象的包名称,其中 '/' 替换为 '.' ('\u002e')。
例如,对于完全限定的 class com.mycompany.business.YourClass
,它的类路径会出现在
classpath-root/
schemas.xsd // some resource
com/
/mycompany
/business
YourClass.class // your class
/schemas
your-class-schema.xsd // some resource
您将访问your-class-schema.xsd
为
YourClass.class.getResourceAsStream("schemas/your-class-schema.xsd");
您将访问schemas.xsd
为
YourClass.class.getResourceAsStream("/schemas.xsd");
如果项目 A 依赖于项目 B,则 A 的类路径包含 B 的所有类文件和资源。
classpath-root-A/
/com
/project
/a
/classes
/com
/project
/B
/classes
您将应用相同的逻辑来访问“导入的”B 项目中的资源。您可以将 B 作为 jar 提供给 A 的类路径。这样做时,类路径将按照上面的示例进行解析。