Java:如何从转义的URL获取文件?

时间:2010-01-29 23:39:37

标签: java file url escaping

我收到一个找到本地文件的URL(我收到的URL不在我的控制范围内)。 URL按RFC2396中的定义进行有效转义。如何将其转换为Java File对象?

有趣的是,URL getFile()方法返回一个String,而不是File。

我创建了一个名为“/ tmp / some dir”的目录(在“some”和“dir”之间有一个间距字符),它通过以下URL正确定位:“file:/// tmp / some %20dir“(为清晰起见添加了引号)。

如何将该URL转换为Java文件?

要提供有关我的问题的更多详细信息,以下内容将打印为false:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );

虽然以下(用空格手动替换“%20”)打印为true:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );

请注意,我不是要求为什么第一个示例打印为false,为什么第二个示例使用我的hacky replaceAll 打印为true,I问我如何将转义的URL转换为Java文件对象。

编辑:谢谢大家,这几乎是一个骗局,但不完全是。

愚蠢的是我在URL类中寻找一个帮助方法。

以下工作可以从Java URL获取Java文件:

URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );

3 个答案:

答案 0 :(得分:66)

File constructor taking an URIURL#toURI()的组合应该有效:

URL url = getItSomehow();
File file = new File(url.toURI());

答案 1 :(得分:20)

URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead

请参阅相关问题How do you unescape URLs in Java?

答案 2 :(得分:5)

AFAIK就像这样Paths.get(url.toURI()).toFile()是最好的,从Java 7开始。另见Converting Java file:// URL to File(...) path, platform independent, including UNC paths