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?
把URI
和URL#toURI()
结合起来的File
构造函数应该可以工作:
URL url = getItSomehow(); File file = new File(url.toURI());
AFAIK像这样Paths.get(url.toURI()).toFile()
是最好的,从Java 7开始。另请参阅将Java文件:// URL转换为文件(…)path,与平台无关,包括UNCpath 。