每当在 以感叹号结尾的目录中运行可执行jar时,
getResourceAsStream 方法将返回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个测试用例。首先,从目录“ D:\ test123!@#”启动可执行jar,没有任何问题。其次,
从目录“ D:\ test123!@#!!!”启动可执行jar,出现问题。
是否不支持以感叹号结尾的目录?代码是否错误?
提前致谢。
可能由于此错误或Java错误数据库中的许多类似错误中的任何一个:
http://bugs.sun.com/view_bug.do?bug_id=4523159
原因是jar URL中的“!/”被解释为JAR文件名和JAR自身内的路径之间的分隔符。如果目录名称以!结尾,则目录末尾的“!/”字符序列将被错误地解释。就您而言,您实际上是在尝试使用以下URL访问资源:
jar:文件:/// d:/ test1231 @#!!! /test.jar!/images/Logo.png
该漏洞已经开放了将近12年,并且不太可能得到修复。
实际上,我不知道如何在不破坏其他事物的情况下进行修复。该
问题是设计决定使用!
在JAR文件的URL方案中作为具有特殊含义的字符(分隔符):
jar:<URL for JAR file>!/<path within the JAR file>
由于感叹号是URL中允许使用的字符,因此它既可能出现在JAR文件本身的URL中,也可能出现在JAR文件中的路径中,
因此在某些情况下无法找到实际的“!/”分隔符。 。
问题内容: 查看数据库中的V $ SQL,我刚发现一个奇怪的查询,看起来像: 有人知道语法@!的含义吗? 我以前从未在Oracle中见过类似的东西 谢谢 问题答案: 这是源自远程数据库的查询。使用@DB_NAME语法在远程数据库上的查询中引用了您在V $ SQL中看到此查询的数据库 远程数据库已将查询推送到您的数据库中以便执行,但是要回答该查询,您的数据库需要从远程数据库中拉回一些信息。这是@!进
问题内容: 我正在阅读此查询,遇到了我不明白的那一行 FETT列表是一个表 FETT搜索是FETT列表中的一列 有人可以解释感叹号的含义吗? 谢谢 问题答案: 通常,您会在MS Access代码中看到此信息(对于感叹号,这是SQL Server的句点)。您可以通过table.column来引用列,或者如果为表赋予别名,则可以通过alias.column来引用。如果要在使用联接时特定于表,则可以执行
在Kotlin中,单个感叹号意味着什么?我见过几次,特别是在使用Java API时。但我在文档中和StackOverflow上都找不到它。
本文向大家介绍Eclipse项目有红感叹号的解决方法,包括了Eclipse项目有红感叹号的解决方法的使用技巧和注意事项,需要的朋友参考一下 Eclipse项目中为什么会有红感叹号,具体分析一下 【问题原因】:工程中classpath中指向的包路径错误 【解决办法】:右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选项卡找到 Librari
从…起https://source.dot.net/#System.Private.CoreLib/Hashtable.cs,475: 它看起来像两个零原谅运算符。有相关文件吗?
问题内容: 我刚刚注意到,我所有的路径中的井号(#!)后都有一个感叹号。我不确定如何以及为什么获得它们,因为今天早些时候我没有它们。 如果有什么办法可以摆脱它们,那么如果有人可以向我解释一下(以及我如何拥有它们),我将不胜感激。 因此,到目前为止,我发现的唯一解决方案是手动将感叹号放在应用程序中的每个href上,但这使我很烦,我也不知道该怎么办。 我用yeoman生成器生成了我的应用,而我的app