让我们考虑将image.png
存储在项目名为 icons 的项目中,我通常会通过getResource()
方法获取图标:
String imgPath = getClass().getResource("/icons/image.png").toString();
//no problem with creating an ImageIcon with this path
Image img = new ImageIcon(imgPath).getImage();
//but the problem occures when trying to open this image through Desktop
//try-catch
Desktop.getDesktop().open(imagePath);
//or
File imgFile = new File(imgPath);
//error, this file does not exist!
我注意到从URL构造一个字符串会给出以file:/....
开头的输出,加载图像没有问题,但在删除file:/
之前无法打开文件。
添加到字符串中的file:/
的好处是什么?
我认为可能路径是文件,但我错了,甚至针对文件夹提供此输出。
答案 0 :(得分:1)
它是特定于文件的URL路径。 有点像网址如何 http:// , https:// 或 ftp:// 文件的URL保持这样的语法 file:/ 诞生了。
例如,将 test.jpg 等图片复制到 C 驱动器。
打开浏览器并输入: file:/ c:/test.jpg
点击 ENTER 并加载图像。
文件有什么好处:/添加到字符串中?
没有真正的好处,除了它成为有效的URL之外,它只能用作URL而不能用作文件的有效路径,因为你会省略文件:/如你所见
有关详情,请参阅file URI scheme
答案 1 :(得分:1)
方法Class.getResources(String)
返回URL
。此URL
可以是本地文件的file:/
,在这种情况下,它将以jar:/
协议开头。但是,您的应用程序或此类可能从JAR文件运行,并且该资源可能包含在JAR文件中。 Sun为这些案例创建了URL
协议。然后,jar:file:/myapp.jar!/com/azad/images/image.png
可能会被归类为URL imgURL = getClass().getResource("/icons/image.png");
//no problem with creating an ImageIcon with this URL
Image img = new ImageIcon(imgURL).getImage();
。因此,不使用基于文件的方法,而是使用基于URL的方法:
ImageIcon
URL
有一个constructor,需要Desktop
。看看JarURLConnection课程。您无法依赖file:/
为您打开网址;该类只处理文件。如果您的URL未指向普通文件,则无法从字符串中删除img
。
我确实编辑了你的帖子:你曾两次使用{{1}}。