gpt4 book ai didi

java - 无法打开以感叹号 (!) 结尾的目录中的资源

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:02 24 4
gpt4 key购买 nike

getResourceAsStream -每当在以感叹号结尾的目录中运行可执行 jar 时,方法都会返回 null。

对于以下示例,我有一个具有以下目录结构的 Eclipse 项目:

src\ (Source Folder)
main\ (Package)
Main.java
res\ (Source Folder)
images\
Logo.png

我正在阅读Logo.png,如下所示:

public static void main(String[] args) throws IOException {
try (InputStream is = Main.class.getClassLoader().getResourceAsStream("images/Logo.png")) {
Image image = ImageIO.read(is);
System.out.println(image);
}
}

请参阅附件中的 2 个测试用例。首先,可执行jar从目录“D:\test123!@#”启动,没有任何问题。其次,可执行jar是从目录“D:\test123!@#!!!”启动的,有问题。

不支持以感叹号结尾的目录吗?代码有错吗?

提前致谢。

Error when running the executable jar in a directory ending with !

最佳答案

可能是因为这个错误或 Java 错误数据库中的许多类似错误中的任何一个:

http://bugs.sun.com/view_bug.do?bug_id=4523159

原因是 jar URL 中的“!/”被解释为 JAR 文件名和 JAR 本身内的路径之间的分隔符。如果目录名称以 ! 结尾,则目录末尾的“!/”字符序列将被错误解释。在您的情况下,您实际上正在尝试访问具有以下 URL 的资源:

jar:file:///d:/test1231@#!!!/test.jar!/images/Logo.png

该错误已存在近 12 年,而且不太可能得到修复。实际上我不知道如何在不破坏其他东西的情况下修复它。问题是设计决定使用!作为 JAR 文件的 URL 方案中具有特殊含义的字符(分隔符):

jar:<URL for JAR file>!/<path within the JAR file>

由于感叹号是 URL 中允许的字符,因此它可能同时出现在 JAR 文件本身的 URL 中以及 JAR 文件内的路径中,从而在某些情况下无法找到实际的“!/”分隔符。

关于java - 无法打开以感叹号 (!) 结尾的目录中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170758/

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