我收到一个定位本地文件的URL(我收到的URL不在我的控制范围内)。 按照RFC2396中的定义有效地转义了URL。 如何将其转换为Java File对象?
有趣的是,URL getFile()方法返回的是字符串,而不是文件。
我创建了一个名为“ / 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,而是在询问如何将转义的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" ) );