尝试在文件和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如果我的路径中没有空格(并且路径看起来相等),则一切正常,但这是我不能强加的用户限制。
问题是您使用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() );
两种方法对我有用,当测试文件名为空时。