我必须根据提供给我的字符串创建一个文件。 对于此示例,假设文件名为“My file w / stuff.txt”。 当Java使用
创建文件时 File file = new File("My file w/ stuff.txt")
即使默认的Windows分隔符是'\'
,它也会假定'/'
斜杠是文件分隔符。因此,将来对file.getName()
的调用将返回" stuff.txt"
。这会导致我的程序出现问题。
有什么方法可以阻止这种行为吗?
答案 0 :(得分:6)
根据this Wikipedia page,Windows API将'/'视为等同于'\'。因此,即使您以某种方式设法在(例如)File
对象中的路径名组件中嵌入“/”,Windows在某些时候也可能会将其视为路径分隔符。
所以你最好的选择是:
(最好的最好取决于您的申请的详细信息;例如,您是否可以向输入伪造文件名的人报告问题。)
如果你试图以'\'的方式区别对待'/',那么你就有可能产生比你解决的问题更多的问题;例如如果您的应用程序需要编写脚本。如果你静静地剥离一个或两个角色(或将它们变成别的东西),你就有可能产生更多的问题;例如意外的路径名冲突。
(我最初建议在带有%-escaped'/'字符的“file:”URL上使用File(URL)
构造函数。但即使它在Java端工作,它也无法在Windows上运行侧。)
答案 1 :(得分:0)
如果正在为您(从外部源)提供字符串,则听起来不能阻止该字符串包含某些字符。如果你有某种GUI来创建字符串,那么你总是可以在那里限制它。否则,无论创建文件的方法是什么,都应检查斜杠并返回错误或按您认为合适的方式处理。
答案 2 :(得分:0)
由于Windows文件名中不允许使用正斜杠或反斜杠,因此应该从用于命名文件的字符串中清除它们。
答案 3 :(得分:0)
好吧,你怎么能阻止它成为文件夹分隔符?这是一个folder separator。如果你可以自己决定什么是文件夹分隔符,那么整个系统就会崩溃。