尝试在文件和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处理对于具有空格的路径安全?
P.S。如果我的路径中没有空格(并且路径看起来相同),一切正常,但这是我不能强加的用户限制。
答案 0 :(得分:5)
问题是您使用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() );
当用空格测试文件名时,这两种方式都适用于我。
答案 1 :(得分:0)
改为使用..
System.out.println(myFile.toURI().toURL().equals(userURL);
那应该返回true
。