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

时间:2011-01-30 22:06:25

标签: java windows file slash

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

创建文件时
 File file = new File("My file w/ stuff.txt")

即使默认的Windows分隔符是'\',它也会假定'/'斜杠是文件分隔符。因此,将来对file.getName()的调用将返回" stuff.txt"。这会导致我的程序出现问题。

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

4 个答案:

答案 0 :(得分:6)

根据this Wikipedia page,Windows API将'/'视为等同于'\'。因此,即使您以某种方式设法在(例如)File对象中的路径名组件中嵌入“/”,Windows在某些时候也可能会将其视为路径分隔符。

所以你最好的选择是:

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

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

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

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

答案 1 :(得分:0)

如果正在为您(从外部源)提供字符串,则听起来不能阻止该字符串包含某些字符。如果你有某种GUI来创建字符串,那么你总是可以在那里限制它。否则,无论创建文件的方法是什么,都应检查斜杠并返回错误或按您认为合适的方式处理。

答案 2 :(得分:0)

由于Windows文件名中不允许使用正斜杠或反斜杠,因此应该从用于命名文件的字符串中清除它们。

答案 3 :(得分:0)

好吧,你怎么能阻止它成为文件夹分隔符?这是一个folder separator。如果你可以自己决定什么是文件夹分隔符,那么整个系统就会崩溃。