最近,我在通过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/