来自 jar-File 的 InputStream 始终返回 null

Posted

技术标签:

【中文标题】来自 jar-File 的 InputStream 始终返回 null【英文标题】:InputStream from jar-File returns always null 【发布时间】:2013-03-27 16:02:01 【问题描述】:

我知道这个问题已经被问过好几次了,但我认为我的问题与其他问题有点不同:

String resourcePath = "/Path/To/Resource.jar";

File newFile = new File(resourcePath);
InputStream in1 = this.getClass().getResourceAsStream(resourcePath);
InputStream in2 = this.getClass().getClassLoader().getResourceAsStream(resourcePath);

File-Object newFile 完全没问题(.jar 文件已找到,您可以获取它的元数据,如 newFile.length() 等)

另一方面,InputStream 总是返回 null。 我知道 javadoc 说如果没有找到具有此名称的资源,getResourceAsStream() 为空,但文件在那里! (显然,因为它在 File-Object 中)

任何人都知道为什么会发生这种情况以及我该如何解决它以便我可以在 InputStream 中获取 .jar 文件?

【问题讨论】:

JAR 文件中的资源本身并不是文件。 【参考方案1】:

getResourceAsStream() 方法不会从文件系统加载文件;它从类路径加载资源。例如,您可以使用它来加载打包在 JAR 中的属性文件。您不能使用它从文件系统加载文件。

因此,如果您的文件位于文件系统上,而不是 JAR 文件中,最好使用 FileInputStream 类。

【讨论】:

以上是关于来自 jar-File 的 InputStream 始终返回 null的主要内容,如果未能解决你的问题,请参考以下文章

来自相对路径的 InputStream

来自 InputStream 的文件路径/名称

从来自 java 中 InputStream 的字符串创建 Spark RDD 或数据帧

来自 inputStream 的内容的 HTTP PUT 请求,大小未知,无法在 HttpUrlConnection 中设置 ChunkedStreamingMode

使用 gzip 压缩 InputStream

如何将多个不同的InputStream链接到一个InputStream中