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

我正在收到一个查找本地文件的URL(我收到一个URL的事实不在我的控制之中)。 该URL按照RFC2396中的定义有效地转义。 我怎样才能把它转换成一个Java文件对象?

有趣的是,URL getFile()方法返回一个string,而不是一个文件。

我创build了一个名为“/ 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() ); 

虽然以下(用空格手动replace“%20”)打印为真:

 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打印真实,我问如何将转义的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" ) ); 
 URLDecoder.decode(url);//deprecated URLDecoder.decode(url, "UTF-8"); //use this instead 

看到相关的问题你如何在Java中使用url?

URIURL#toURI()结合起来的File构造函数应该可以工作:

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

AFAIK像这样Paths.get(url.toURI()).toFile()是最好的,从Java 7开始。另请参阅将Java文件:// URL转换为文件(…)path,与平台无关,包括UNCpath 。