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