当前位置: 首页 > 面试题库 >

用Java加载资源的首选方式

邓才
2023-03-14
问题内容

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

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

问题答案:

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

从被调用的类中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”并将其返回。



 类似资料:
  • 问题内容: 在我的应用程序中,我以这种方式加载资源: 这给了我: 当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作: 路径变为: 有什么办法解决这个问题? 我将使用“存储库”目录名称来创建此目录: 以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它: 问题答案: 听起来你正在尝试使用或类似方法加载资源。不要那样做:不要调用,而是从中调用并读取数据。

  • 问题内容: 可以说我正在通过服务器提供根目录中的以下文件。 无论与当前正在使用公共目录文件夹。 要加载这些文件,我必须在文件中包含以下行,以便可以在公用文件夹中搜索请求: 为什么会这样呢?由于资源路径正确,为什么不能正确引用没有上一行的文件?同样适用。是否确实必须通过静态静态提供index.html使用的每个资源? 问题答案: 默认情况下,node.js Web服务器不提供任何文件。因此,仅因为您

  • 问题内容: 浏览服务器的IP地址时,我有一个jar可以很好地加载java web start。一旦尝试使用服务器 名称, 我将收到以下异常: 包装的异常: JNLP: 知道我应该找什么吗? 问题答案: 我已经将Java代理设置更改为直接连接-并且它可以工作。

  • 浏览器允许我们跟踪外部资源的加载 —— 脚本,iframe,图片等。 这里有两个事件: onload —— 成功加载, onerror —— 出现 error。 加载脚本 假设我们需要加载第三方脚本,并调用其中的函数。 我们可以像这样动态加载它: let script = document.createElement('script'); script.src = "my.js"; docume

  • CodeIgniter 的"自动加载"特性可以允许系统每次运行时自动初始化类库、辅助函数和模型。 如果你需要在整个应用程序中全局使用某些资源,为方便起见可以考虑自动加载它们。 支持自动加载的有下面这些: libraries/ 目录下的核心类 helpers/ 目录下的辅助函数 config/ 目录下的用户自定义配置文件 system/language/ 目录下的语言文件 models/ 目录下的模

  • 传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> 系统提供了专门的标签来简化上面的导入: {load href="/stati