【发布时间】:2015-10-01 20:01:55
【问题描述】:
谁能解释一下 .getResourceAsStream() 是如何工作的。我试图找出痛苦的事实,在某些情况下 getClass().getResourceAsStream(name);在 Eclipse 中可以正常工作,但在已部署版本(NPE)中不能正常工作。我面临的另一个事实是,有时 getClass().getResource(name);返回一个完全有效的 url 但 getClass().getResourceAsStream(name);返回空值。是否有人编写了一个库,我只需传递包(路径)和文件名并接收流而无需唠叨?
编辑:这是一个普遍的东西,每次我必须使用 getResourceAsStream() 时都会影响到我。是的,我可以提供一个针对实际情况截取的代码,但这对我下一次没有帮助,直到我不明白 getResourceAsStream 是如何工作的。
编辑2:和有什么区别:
MyClass.class.getResourceAsStream(...)
this.getClass().getResourceAsStream(...),
MyClass.class.getClassLoader().getResourceAsStream(...)
Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
编辑 3:
此外,虽然some.package.SomeClass.class.getResourceAsStream("/path/only/holding/resource.files") 无法在不包含类而只包含文件的类路径中加载资源。这个变体能够做到这一点:ClassLoader.class.getResourceAsStream("/path/only/holding/resource.files") 这让我很困惑,所以我真的更喜欢 spring 对 URI 模式类路径所做的事情:
【问题讨论】:
-
提供代码并最好提供您的 jar/war 的内容,通过 zipinfo 提供。