java url 文件名_将URL转换为普通的Windows文件名Java

小编典典

当前的建议(使用JDK

1.7+)是转换URL→URI→路径。因此,要将URL转换为File,您应该说Paths.get(url.toURI()).toFile()。如果您还不能使用JDK

1.7,我建议您使用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规范为 RFC 1738:URL,由RFC 2396:URI取代,并由RFC 3986:URI取代。(WHATWG也具有URI规范,但未指定文件URI的解释方式。)调用URI时,路径中的任何保留字符都用百分号引起来,而URI中的非ASCII字符则用百分号引起来。 toASCIIString()。

File.toURI()比Path.toUri()更糟糕,因为File.toURI()返回不寻常的非RFC 1738 URI(提供file:/而不是file:///),并且不会根据UNC路径格式化URI 微软的首选格式。但是,这些UNC URI都不在Firefox中起作用(Firefox需要file:/)。

路径比文件更严格;您不能从“ \。\”前缀构造无效的路径。“这些前缀不用作路径本身的一部分,”但可以将它们传递给Win32 API。

转换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

同样,使用Paths.get(URI)优先于new File(URI),因为Path能够处理UNC

URI并拒绝带有\?\前缀的无效路径。但是,如果您不能使用Java 1.7,请new

File(URI.getSchemeSpecificPart())改为说。

顺便说一句,千万 不能 用URLDecoder解码文件URL。对于包含“ +”的文件,例如“ file:/// C:/main.c++”,

URLDecoder请将其转换为“ C:\

main.c”!URLDecoder仅用于解析URI的查询(param=value&param=value)中的application /

x-www-form-urlencoded HTML表单提交,而不用于取消引用URI的路径。

2014-09:编辑添加示例。

2020-09-23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值