Java中存在冲突的文件,URI和URL

时间:2011-07-25 14:59:16

标签: java file url path uri

尝试在文件和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。如果我的路径中没有空格(并且路径看起来相同),一切正常,但这是我不能强加的用户限制。

2 个答案:

答案 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