我需要根据提供给我的字符串创建一个文件。 以这个例子为例,假设文件名是"My file w/ stuff.txt"。 当Java使用
File file = new File("My file w/ stuff.txt")
尽管默认的Windows分隔符是
'\'
,但它会将 '/'
斜杠视为文件分隔符。因此,对 file.getName()
的未来调用将返回 " stuff.txt"
。这会影响我的程序。有没有什么方法可以防止这种行为?
/
视为等同于\
。 即使您在路径名组件(例如File
对象)中嵌入了/
,Windows也有可能在某些时候将其视为路径分隔符。
因此您的选择是:
让Windows像通常一样处理/
。 即让其将字符视为路径名分隔符。(用户应该知道这一点。这是对Windows用户的“计算机素养”要求。)
与上面类似,但警告用户存在/
。
检查/
和\
字符,并拒绝两者,说明文件名(即路径名组件)不能包含路径名分隔符。
使用某种编码方案在尝试创建文件之前编码保留的字符。 然后,在需要向用户显示其“带斜杠的文件名”的所有点上反向应用解码方案。
注意:如果用户可以看到实际文件路径(例如通过命令 shell),则无法向他们隐藏编码/解码过程。可以说,这比您尝试解决的“问题”更糟糕。
Windows操作系统不接受此目的的任何转义方案。 您需要使用诸如%
编码之类的东西;例如用%2F
替换/
。 基本上,您需要通过在操作系统级路径名中使用其他字符替换它来“隐藏”斜杠字符以避免其影响 Windows!
最佳选项取决于您的应用程序的细节,例如您是否可以向输入虚假文件名的人报告问题。
由于在Windows文件名中不允许使用正斜杠或反斜杠,因此应该将用于命名文件的字符串中的这些字符清除。
/
。您可以使用转义字符来避免这种情况,例如:File file = new File("My file w/ stuff.txt")。 - Falmarri