Syn*_*r0r 45 java url escaping file
我收到一个找到本地文件的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() );
Run Code Online (Sandbox Code Playgroud)
而以下(用空格手动替换"%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() );
Run Code Online (Sandbox Code Playgroud)
请注意,我不是在问为什么第一个示例打印为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" ) );
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 66
结合使用的File构造函数URIURL#toURI()应该工作:
URL url = getItSomehow();
File file = new File(url.toURI());
Run Code Online (Sandbox Code Playgroud)
Ces*_*sar 20
URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead
Run Code Online (Sandbox Code Playgroud)
请参阅相关问题如何在Java中浏览URL?
像这样的AFAIK Paths.get(url.toURI()).toFile()是最好的,从Java 7开始.另请参见将Java file:// URL转换为File(...)路径,与平台无关,包括UNC路径.
| 归档时间: |
|
| 查看次数: |
51816 次 |
| 最近记录: |