当前建议(使用 JDK 1.7+)是将 URL → URI 转换为→路径。因此,要将URL转换为文件,您会说.如果你还不能使用JDK 1.7,我会推荐。Paths.get(url.toURI()).toFile()
new File(URI.getSchemeSpecificPart())
将文件→ URI:首先,我将向您展示一些示例,说明您可能在Java中获得的URI。
-classpath URLClassLoader File.toURI() Path.toUri()
C:\Program Files file:/C:/Program%20Files/ file:/C:/Program%20Files/ file:///C:/Program%20Files/
C:\main.c++ file:/C:/main.c++ file:/C:/main.c++ file:///C:/main.c++
\\VBOXSVR\Downloads file://VBOXSVR/Downloads/ file:////VBOXSVR/Downloads/ file://VBOXSVR/Downloads/
C:\Résume.txt file:/C:/R%c3%a9sume.txt file:/C:/Résume.txt file:///C:/Résume.txt
\\?\C:\Windows (non-path) file://%3f/C:/Windows/ file:////%3F/C:/Windows/ InvalidPathException
关于这些 URI 的一些观察结果:
将 URI →文件:让我们尝试将前面的示例转换为文件:
new File(URI) Paths.get(URI) new File(URI.getSchemeSpecificPart())
file:///C:/Program%20Files C:\Program Files C:\Program Files C:\Program Files
file:/C:/Program%20Files C:\Program Files C:\Program Files C:\Program Files
file:///C:/main.c++ C:\main.c++ C:\main.c++ C:\main.c++
file://VBOXSVR/Downloads/ IllegalArgumentException \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file:////VBOXSVR/Downloads/ \\VBOXSVR\Downloads \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file://///VBOXSVR/Downloads \\VBOXSVR\Downloads \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file://%3f/C:/Windows/ IllegalArgumentException IllegalArgumentException \\?\C:\Windows
file:////%3F/C:/Windows/ \\?\C:\Windows InvalidPathException \\?\C:\Windows
同样,using 优于 ,因为 Path 能够处理 UNC URI 并拒绝带有 \?\ 前缀的无效路径。但是如果你不能使用Java 1.7,那就说吧。Paths.get(URI)
new File(URI)
new File(URI.getSchemeSpecificPart())
顺便说一句,不要用于解码文件URL。对于包含“+”(如“file:///C:/main.c++”)的文件,会将其转换为“C:\main.c”! 仅用于解析 URI 查询中的 application/x-www-form-urlencoded HTML 表单提交(),而不用于取消引用 URI 的路径。URLDecoder
URLDecoder
URLDecoder
param=value¶m=value
2014-09:编辑以添加示例。