Windows上的Java:防止文件名中的"/"斜杠充当分隔符

bra*_*ido 4 java windows file slash

我必须根据提供给我的字符串创建一个文件.对于此示例,假设文件名为"My file w/stuff.txt".当Java使用创建文件时

 File file = new File("My file w/ stuff.txt")
Run Code Online (Sandbox Code Playgroud)

即使默认的Windows分隔符是'\',它也假定'/'斜杠是文件分隔符.所以未来的电话file.getName()会回来" stuff.txt".这会导致我的程序出现问题.

有什么方法可以防止这种行为吗?

Ste*_*n C 6

根据这个维基百科页面,Windows API将'/'视为等同于'\'.因此,即使您以某种方式设法在(例如)File对象中的路径名组件中嵌入"/" ,Windows在某些时候也可能将其视为路径分隔符.

所以你最好的选择是:

  • 让Windows像往常一样对待'/'; 即让它将字符视为路径名分隔符.
  • 如上所述,但是向用户发出关于'/'的警告.
  • 检查'/'和'\'字符,并拒绝两个文件名(即路径名组件)不能包含路径名分隔符.

(最好的最好取决于您的应用程序的详细信息;例如,您是否可以向输入伪造文件名的人报告问题.)

如果你试图将'/'与'\'区别对待,你就有可能产生比你解决的问题更多的问题; 例如,如果您的应用程序需要编写脚本.如果你静静地剥离一个或两个角色(或将它们变成别的东西),你就有可能产生更多的问题; 例如意外的路径名冲突.

(我最初建议File(URL)在带有%-escaped'/'字符的"file:"URL上使用构造函数.但即使它在Java端工作,它也无法在Windows端工作.)