gpt4 book ai didi

java - getResourceAsStream() hell

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:28 25 4
gpt4 key购买 nike

有人可以向我解释一下 .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 所做的事情架构类路径:

最佳答案

规则很简单。假设您的类(class)在包裹 com.foo 中.

调用 getResource("bar/bla.txt") (无前导 / )在这个类上将在 bla.txt 中查找文件在包裹中 com.foo.bar .因此,路径是相对于类的包的。类路径用于查找文件,就像类路径用于查找类一样。

调用 getResource("/bar/bla.txt") (前导 / )在这个类上将在 bla.txt 中查找文件在包裹中 bar .因此该路径是一条绝对路径,从类路径的根开始。类路径用于查找文件,就像类路径用于查找类一样。

并且您可能没有包含 . 的路径或 ..就像您使用文件系统路径一样。

关于java - getResourceAsStream() hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com