Java处理文件路径时是否将多斜杠视为单个斜杠?是否始终生效?
Java文件路径中多斜杠的处理规则
先直接给你明确答案:是的,Java在处理文件路径时,会把连续的多个斜杠(不管是反斜杠\还是正斜杠/)视为单个路径分隔符,而且不管连续的斜杠数量是2个、3个甚至更多,都会被同等处理成一个分隔符。
结合你给出的代码具体解释:
你写的第一个fileName字符串是:
String fileName = "C:\\Dev\\TryEclipseJava\\StringEscape\\\\\\f.txt";
经过Java的字符串转义后,实际对应的文件路径是C:\Dev\TryEclipseJava\StringEscape\\\f.txt(因为Java里两个\\才会被解析成一个实际的\)——这里有连续三个反斜杠。而注释里的路径是:
String fileName = "C:\\Dev\\TryEclipseJava\\StringEscape\\f.txt";
转义后是C:\Dev\TryEclipseJava\StringEscape\f.txt。这两个路径在Java的File类解析时会被视为完全相同的路径,所以执行代码后,两者的结果完全一致:如果目标文件存在,都会输出File exists!,不存在则输出File does not exist!。
背后的原因是:Java的文件操作类(比如File、NIO中的Paths/Files)在解析路径时,会自动对路径进行规范化处理,其中就包含了合并连续的路径分隔符这一步。这个规则是始终生效的,只要是作为路径层级分隔的连续斜杠,不管数量多少,都会被合并成一个。
补充个小细节:如果斜杠出现在文件名里(不过Windows系统本身不允许文件名包含斜杠,Unix-like系统里斜杠是路径分隔符,也不能作为文件名的一部分),那情况就不一样,但在路径的层级分隔位置,这个合并规则是通用的。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

