一尘不染

用Java加载资源的首选方式

java

我想知道用Java加载资源的最佳方法:

  • this.getClass().getResource() (or getResourceAsStream()),
  • Thread.currentThread().getContextClassLoader().getResource(name),
  • System.class.getResource(name)。

阅读 359

收藏
2020-03-06

共1个答案

一尘不染

根据你的需要制定解决方案…

从被调用的类中getResource/ getResourceAsStream()将获得两件事…

  1. he class loader
  2. The starting location

所以如果你这样做

this.getClass().getResource("foo.txt");

它将尝试从与“ this”类相同的包中以及“ this”类的类加载器中加载foo.txt。如果在前面加上“ /”,则绝对是在引用资源。

this.getClass().getResource("/x/y/z/foo.txt")

将从“ this”的类加载器和xyz包中加载资源(它必须与该包中的类位于同一目录中)。

Thread.currentThread().getContextClassLoader().getResource(name)

将使用上下文类加载器加载,但不会根据任何包解析名称(必须绝对引用)

System.class.getResource(name)

将使用系统类加载器加载资源(也必须绝对引用该资源,因为你将无法在java.lang包(System的包)中放入任何内容。

只需查看源代码即可。还指示getResourceAsStream只是在从getResource返回的URL上调用“ openStream”并将其返回。

2020-03-06