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

getResourceAsStream()地狱

葛阳
2023-03-14
问题内容

有人可以向我解释一下.getResourceAsStream()如何真正起作用。我试图找出令人痛苦的事实,在某些情况下是getClass()。getResourceAsStream(name);
在Eclipse中可以正常使用,但在部署版本(NPE)中则不能。我面临的另一个事实是,有时getClass()。getResource(name);
返回一个完全有效的网址,但getClass()。getResourceAsStream(name);
返回null。有人写过一个库,我只是在其中传递包(路径)和文件名并接收流而不会without?

编辑:这是一般的事情,每当我不得不使用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和schema类路径做的事情:


问题答案:

规则很简单。假设您的课程在package中com.foo

在此类上调用getResource("bar/bla.txt")(不加引号/)将bla.txt在包中查找文件com.foo.bar。因此,该路径是相对于该类的包的。类路径用于查找文件,就像类路径用于查找类一样。

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

而且,您可能没有包含.或不包含..文件系统路径的路径。



 类似资料:
  • 问题内容: 我试图在中加载文件,而使用时却出现异常。但是,使用相同的路径时,我能够加载文件。两种方法有什么区别,为什么一种方法有效而另一种无效? 问题答案: 在和配偶的行为在本地磁盘文件系统上。问题的根本原因是其中的相对路径取决于当前工作目录。即从中启动JVM(在你的情况下为:Web服务器的目录)的目录。例如,这可能是或完全不同的东西,但是却并非 如此,或者你期望的是什么。在正常的项目中,该值为。

  • 我有以下问题 返回null,但是 返回InputStream,并且两个文件都在此文件夹中。有什么不对劲? 我使用的是libgdx-0.9.6

  • 问题内容: 我的项目目录结构(在Eclipse中): 在中,我有以下代码: 运行此命令时,将获得以下控制台输出: 为什么? 我放置在错误的位置了吗?我是否使用了ClassLoader API错误?还有吗 提前致谢! 问题答案: 如果在同一包装中使用 您拥有的方式 它在类路径的根目录中查找文件。你可以用 搜索规则在的javadoc和的javadoc中进行了说明。

  • 问题内容: 不知道这怎么可能。我重新阅读了getResourceAsStream,它始终返回null。 在Finder中(使用OS X和Eclipse),在test.java的旁边是test.xml 我可以在TextWrangler中打开它,并查看其中是否存在数据。 如果有什么不同,这是Junit测试。我去查看了系统上现有的Junit测试,并以与工作示例完全相同的方式来使用它(如文件所在的位置和代

  • 问题内容: 我正在从Java项目的已编译JAR中的包中加载文本文件。相关目录结构如下: 我的代码通过调用返回来加载文件。 无论我使用什么,都将始终打印输出。我不确定为什么上面的方法行不通,所以我也尝试了: 这些都不起作用。我 读 了许多 问题至今的话题,但他们都不是有帮助的-通常情况下,他们只是说,使用根路径,这我已经在做负载文件。那,或者只是从当前目录加载文件(只是),我也尝试过。该文件将使用适

  • 我不知道如何进行堆栈跟踪: NullPointerException