我想知道在 Java 中加载资源的最佳方式:
this.getClass().getResource() (or getResourceAsStream())
Thread.currentThread().getContextClassLoader().getResource(name)
System.class.getResource(name)
. 最佳答案
根据您的需要制定解决方案...getResource
/getResourceAsStream()
将从它被调用的类中得到两件事......
所以如果你这样做
this.getClass().getResource("foo.txt");
它将尝试从与“this”类相同的包中加载 foo.txt,并使用“this”类的类加载器。如果您在前面放了一个“/”,那么您绝对是在引用资源。
this.getClass().getResource("/x/y/z/foo.txt")
将从“this”的类加载器和 x.y.z 包中加载资源(它需要与该包中的类位于同一目录中)。
Thread.currentThread().getContextClassLoader().getResource(name)
将使用上下文类加载器加载,但不会根据任何包解析名称(必须绝对引用)
System.class.getResource(name)
将使用系统类加载器加载资源(它也必须被绝对引用,因为您将无法将任何内容放入 java.lang 包(系统包)。
只需看一下来源。还表示 getResourceAsStream 只是在从 getResource 返回的 URL 上调用“openStream”并返回它。
关于java - Java加载资源的首选方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3861989/