java - %2f 或常见 vfs 中的其他特殊字符

标签 java apache-commons-vfs

最近,我在通过commons-vfs解析文件路径时遇到一个问题。

  FileObject tmpDestFo = fsm.resolveFile("/tmp/tempfile%2flicense.xml");
  tmpDestFo.copyFrom(destFo);

例如,复制后我期望在“/tmp”目录下创建一个名为“tempfile%2flicense.xml”的文件。但结果是在“/tmp/tempfile”目录中创建了一个名为“license.xml”的文件。

我认为这是由resolveFile API 将字符“%2f”替换为“/”引起的。我不确定其他特殊字符是否以同样的方式处理。

你对这个问题有一些想法吗?我确实想要一个名称包含“%2f”的文件。

非常感谢。

最佳答案

resolveFile() 需要一个 URI,实际上您需要转义相当多的字符。您可以通过 URL 编码运行文件路径,也可以使用 new File("/tmp/tempfile%2flicense.xml").toURI().toString() (至少对于正常文件名称)。

在您的情况下,您需要将 % 替换为 %25:“/tmp/tempfile%252flicense.xml”

顺便说一句:%2f 是一个编码的/,你确定它应该这样命名吗?

关于java - %2f 或常见 vfs 中的其他特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634186/

相关文章:

java - 如何最大限度地减少层次结构的代码量

java - Ant 公然忽略 JAVA_HOME 环境变量

java - 使用 Apache Commons VFS API 的特定文件监视器

java - "Expecting/to follow the hostname in URI"密码包含@时异常

java - 公共(public)VFS : SFTP URL Syntax while connecting to Windows Server running with Open SSH

java - 在Java中使用apache commons vfs2访问后删除zip文件

java - 如何在 servlet 和 jsp 文件之间共享 session 属性?

设置图标时出现java.lang.NullPointerException?

java - 使用 FTP URL 调用 FileSystemManager.resolveFile 时无法更改到工作目录 "/"

java - 什么时候可以抛出 NoSuchResult