我想知道在 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/

    10-14 12:44
    查看更多