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

getResourceAsStream在新环境下失败?

水麒
2023-03-14
问题内容

哈o

我有以下代码行:

InputStream passoloExportFileInputStream = getClass().getClassLoader().getResourceAsStream("/com/thinkplexx/lang/de/general.xml");

而且我知道带有com / thinkplexx / lang / de / general.xml的jar在类路径中。

它在maven2构建的“先前环境”下工作。

现在,我评估了maven3,它不起作用!我知道,如果我将代码更改为:

InputStream passoloExportFileInputStream = getClass().getClassLoader().getResourceAsStream("com/thinkplexx/lang/de/general.xml");

它很好用(我只是从资源路径中删除了第一个斜杠)。

顺便说一句,我使用Linux。path中的第一个斜杠通常表示“来自根目录”,因此,如果这种逻辑对于Java资源加载也很合理,则第一个示例应该永远不会起作用!

问题:第一个代码示例(即 / com / 而不是 com /)有问题 吗?仅仅是不好的代码还是意味着不同?

谢谢!


问题答案:

这取决于您如何获取资源。当您在其中使用ClassLoaderas时:

InputStream stream= getClass().getClassLoader().getResourceAsStream("/com/thinkplexx/lang/de/general.xml");

前导“ /”是没有意义的。因此,正确的格式是“ com / thinkplexx / lang / de / general.xml”。

如果是,而是使用“类”,例如:

InputStream stream= getClass().getResourceAsStream("/com/thinkplexx/lang/de/general.xml");

您得到不同的行为。该Class.getResourceAsStream会考虑类,而领先“”
相对于包含类的包。以“。”开头的资源。是绝对的,或相对于jar根解析的。

因此,如果this是对的引用com.example.SomeThing,则预期的行为是:

getClass().getResourceAsStream("/a/b/c.xml")  ==> a/b/c.xml
getClass().getResourceAsStream("a/b/c.xml")  ==> com/example/a/b/c.xml
getClass().getClassLoader().getResourceAsStream("a/b/c.xml")  ==> a/b/c.xml
getClass().getClassLoader().getResourceAsStream("/a/b/c.xml")  ==> Incorrect

Maven2松懈并允许使用最后一种形式。



 类似资料:
  • 在本地,裸机、两个独立的“服务”通过gRPC连接、客户端和“后端”成功地相互通信。两者都是使用gRPC传输实现的NestJS应用程序。 当部署在kubernetes(minikube)环境中时,我得到错误:14不可用:没有在客户端建立连接。后端侦听本地主机:50051(端口从k8服务公开),前端尝试连接引擎svc。违约svc。簇本地:50051,其中直到点的第一部分是服务名称,我已经找到它以确保这

  • Q:如何在NSIS里刷新环境变量 A:使用SendMessage ,例子如下: ;修改环境变量 WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "abcd" "ggg" ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHAN

  • 我试图在JUnit5测试环境中使用JUnit4。事实上,我已经升级了我的pom来使用更高版本的MOckito和POwerMock。到目前为止,所有测试都基于JUnit4。我将平台和vintage依赖项添加到我的pom.xml中。 更早的pom。xml依赖关系

  • 本文向大家介绍在Ubuntu下搭建Android开发环境,包括了在Ubuntu下搭建Android开发环境的使用技巧和注意事项,需要的朋友参考一下 1、安装JDK 其实这一步我比较偷懒,在网上查了一下Ubuntu系统下安装JDK的方法,看起来稍稍有点麻烦,于是我试着在自带的软件中心里搜了一下,然后发现在软件中心里有个OpenJDK Java 7,尝试着安装后,发现这是个好东西,一键安装后环境变量什

  • 目标 在这个教程中:我们将会学习如何在 Fedora 系统下安装 OpenCV-Python。下面的步骤在 Fedora 18 (64-bit) 和 Fedora 19 (32-bit) 下通过了测试。 介绍 OpenCV-Python 可以通过两种方式安装到 Fedora 上: 安装 Fedora 软件包库中的预编译二进制文件 从源代码编译 在这一教程中,我们将展示这两者。 另一个重要的事是所需