File.toURL()被弃用了吗?

19
为什么函数java.io.File.toURL()被弃用?我需要将URL对象传递给Toolkit.createImage()。Javadoc建议我使用File.toURI().toURL()。然而:

C:\Documents and settings\Administrator\...

会变成:

C:\Documents%20and%20settings\Administrator\...

显然这是无效的文件位置。我发现File.toURL()可以创建没有转义的URL,但它已经被弃用了。虽然它能工作,但我不敢使用弃用的函数。有没有一个未被弃用的方法可以实现相同的功能?

编辑:目前我的代码看起来像:

spriteImage1 = tkit.createImage(new File("./images/sprite1.png").getCanonicalFile().toURL());

编辑:我需要从我的 .jar 文件外创建一个图像。我需要一个相对路径("./images/sprite1.png")。当我尝试将其作为相对路径传递给createImage(String)方法时,会抛出异常。


1
我并不明白你为什么认为转义版本是错误的。诚然,我可能会期望使用 + 而不是 %20,但我希望它仍然能够正常工作。 - Jon Skeet
4
第二个不应该是 file:///C:/Documents%20and%20settings/Administrator/... 吗? - Powerlord
实际上第二个版本在传递给 createImage()时会给我一个异常,而第一个则正常工作。是的,它是 file:///... - Lucky
如果字符串中包含未编码的空格(%20),那么它就不是一个URL。请不要欺骗计算机。 - Paul Tomblin
关于您的第二次编辑:您尝试过使用file.getAbsolutePath()还是只用了file.getPath()? - Michael Myers
显示剩余2条评论
7个回答

39

使用:

URL url2 = file.toURI().toURL();

14
它无法正确处理特殊字符,如this bug所述。

11

5

你为什么不直接使用createImage函数,它可以使用字符串文件名作为参数?


5

我认为这个问题的正确答案是在此链接中公布的:http://www.jguru.com/faq/view.jsp?EID=1280051

如上所述,正确的方法是:

// Supposing f is the referenced file in code and we want to
// get an URL instance without deprecation warnings.
URL externalForm = f.toURI().toURL();

这里没有MalformedURLException的问题,本题是关于方法file.toURL()被弃用的问题。

希望这能有所帮助。


1
你可以考虑使用ImageIO作为替代方案。

0

我认为你必须以这种方式编写URL:

C:/Documents and settings/Administrator/...

而不是这种方式:

C:\Documents and settings\Administrator...


该内容与编程有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接