当前位置: 首页 > 面试题库 >

Java中的文件,URI和URL冲突

史昊焱
2023-03-14
问题内容

尝试在文件和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() );

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



 类似资料:
  • 问题内容: 我现在正在看一段Java代码,它采用一个路径作为String并使用来获取其URL ,然后调用并最终执行。 哦,还有和的电话。 我现在很困惑-我猜主要是因为术语。有人可以请我介绍这些差异,还是提供一些指向虚拟模型的材料的链接?尤其是URL的URI和 文件的资源 ?对我来说,感觉它们应该分别是同一件事。 和之间的区别在 这里解释:url.getFile()和getpath()有什么区别?(

  • 问题内容: 在W3 Schools URL编码网页 上看到,它说应该被编码为,并且应该被编码为。 我已经尝试了和,但是上述方法都没有正确执行: 由于某些原因,电子邮件地址正确但不能空格,并且货币而不是电子邮件地址。 我应该如何编码这两个参数,以与w3schools所说的正确(或w3schools错误)相一致? 问题答案: 尽管我认为@fge的答案是正确的,但是由于我使用的是基于W3Schools文

  • 问题内容: 我想定义一个包含三个变量组件的url规则,例如: 但是我发现开发服务器在尝试匹配静态文件之前会评估这些规则。所以像这样: 会被我的url规则捕获,而不是转发给内置的静态文件处理程序。有没有一种方法可以强制开发服务器首先匹配静态文件? PS仅当规则具有两个以上可变组成部分时,这才是问题。 问题答案: 这是werkzeug路线优化功能。见,并且: 有-当前参数-路径深度。 因为我们有。有-

  • 问题内容: 是否可以使用Java获取存档中文件的文件或URI对象?(zip或jar存档) 谢谢Hemeroc。 问题答案: 该协议是一种构建JAR存档中资源的URI的方法: 请参阅JarURLConnection的API文档:http : //java.sun.com/javase/6/docs/api/java/net/JarURLConnection.html 在和之间可以是任何URL,包括U

  • 本文向大家介绍emacs 文件和缓冲区,包括了emacs 文件和缓冲区的使用技巧和注意事项,需要的朋友参考一下 示例 在Emacs中,文件的含义与操作系统中的含义相同,并且用于永久存储数据。甲缓冲器是正在编辑的文件的内部表示。可以使用将文件读取到缓冲区中C-x C-f,并且可以使用C-x C-s(将文件保存到当前位置)或C-x C-w(将文件写入其他位置,提示输入-等效于Save as)将缓冲区写

  • 问题内容: 我正在制作一个将从URL下载文件的程序。总会开始下载,但未完成。例如,如果文件大小为3 MB,则程序仅下载文件大小的一半,因此我无法打开下载的文件。但是程序说文件成功下载了。 那么我该如何解决呢?应该使用其他方式下载吗? 问题答案: 您由于 您正在阅读两次,只写一次。 您需要做的是 这是您的完整代码