【发布时间】:2013-07-04 09:06:13
【问题描述】:
每当在以感叹号结尾的目录中运行可执行 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 个测试用例见附件。首先,可执行 jar 从目录“D:\test123!@#”启动,没有任何问题。其次,可执行jar从目录“D:\test123!@#!!!”启动,有问题。
是否不支持以感叹号结尾的目录?代码错了吗?
提前致谢。
【问题讨论】:
-
有什么原因,你可以创建/使用普通名称的目录吗?
-
您确定在两个目录中放置了相同的 jar 包吗?
-
用户可以从他们文件系统的任何地方执行我的应用程序。 Windows 支持带有感叹号的目录。
-
@Andremoniy 是的,100% 确定
-
@mtk:包含文件系统支持的字符的名称不“正常”是否有原因?
标签: java resources classpath classloader javax.imageio