2016-01-13 18 views
1

我曾经使用URI元素来表示基本文件夹,并使用URI.resolve(filename)将URI获取到实际的文件我想写入磁盘。URI.resolve()不支持允许的文件名字符的全部范围

现在我明白了原因,解析方法不支持许多字符,操作系统支持文件名和那些必须使用%HEX编码。

因为我不知道这个限制和编码真的走多远。这通常用于参数值,我几乎无法想出在路径中看到编码的情况。

因此,保存假设使用URI.resolve(URLEncoder.encode(文件名))是否有诀窍?有什么更好的选择或边缘情况我应该知道?

+0

你能提供一个例子吗? –

回答

0

它实际上是URI.create(EN),它失败了,例如使用(这是一个有效的,如果一个很奇怪的文件名)抛出IllegalArgumentException: Malformed escape pair at index 4
至于URLEncoder.encode(filename) “@#$%^ &()!” - 这是已弃用并且应该使用URLEncoder.encode(filename, encoding)
从我的经验,文件名URI分辨率是最好的new File(f).toURI()作为给定抽象路径名˚F处理,可以保证:

新文件(f.toURI())等于(f.getAbsoluteFile() )

+0

谢谢。所以基本上我的例子是这样的:uri.resolve(...) - >新文件(新文件(uri),文件名).toURI()这是建议。 –

+0

是的,当uri表示父母时,这也会起作用 –

+0

按预期工作。如果我使用与非文件系统相关的URI来处理远程文件,是否有问题? –