小编典典

Java中的文件,URI和URL冲突

javascript java

尝试在文件和URL之间进行转换时,我得到一些奇怪的行为,尤其是当文件/路径的名称中带有空格时。有没有在两者之间进行转换的安全方法?

我的程序具有文件保存功能,其中实际的“保存”操作委托给需要URL作为参数的外部库。但是,我也希望用户能够选择要保存到的文件。问题是,在文件和URL之间进行转换(使用URI)时,空格显示为“%20”,并弄乱了各种操作。考虑以下代码:

//...user has selected file
File userFile = myFileChooser.getSelectedFile();
URL userURL = userFile.toURI().toURL();

System.out.println(userFile.getPath());
System.out.println(userURL);

File myFile = new File(userURL.getFile());

System.out.println(myFile.equals(userFile);

这将返回false(由于出现“%20”符号),并且在我的程序中引起了严重的问题,因为文件和URL被移交并且经常必须对其执行操作(例如获取父级/子目录)。有没有一种方法可以使文件/ URL处理带有空格的路径安全?

PS如果我的路径中没有空格(并且路径看起来相等),则一切正常,但这是我不能强加的用户限制。


阅读 277

收藏
2020-09-16

共1个答案

小编典典

问题是您使用URL构造了第二个文件:

File myFile = new File(userURL.getFile());

如果您坚持使用URI,那么最好:

URI userURI = userFile.toURI();
URL userURL = userURI.toURL();
...
File myFile = new File(userURI);

要么

File myFile = new File( userURL.toURI() );

两种方法对我有用,当测试文件名为空时。

2020-09-16