Java:如何从转义的URL中获取文件?
我收到一个定位本地文件的 URL(我收到 URL 的事实不在我的控制范围内)。按照 RFC2396 中的定义,对 URL 进行了有效的转义。如何将其转换为 Java 文件对象?
有趣的是,URL getFile() 方法返回一个字符串,而不是一个 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 print true,我是在问如何将转义的 URL 转换为 Java File 对象。
编辑:谢谢大家,这几乎是一个骗局,但并不完全是。
愚蠢的是,我在URL类本身中寻找一个帮助器方法。
以下内容按预期工作,以便从 Java URL 获取 Java 文件:
URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );