从getResource(“...”)构造一个字符串给出一个以“file:/”开头的输出?

时间:2013-06-28 20:56:20

标签: java url

让我们考虑将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:/的好处是什么?
我认为可能路径是文件,但我错了,甚至针对文件夹提供此输出。

2 个答案:

答案 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}}。