如果我想在java中创建Path
的实例,我应该写这样的东西:
Paths.get("D:\\dir1\\dir2\\dir3");
因此我应该使用双反斜杠
我也可以使用单斜杠
Paths.get("D:/dir1/dir2/dir3");
如果我想写GLOB模式,我有以下变体:
FileSystems.getDefault().getPathMatcher("glob:D:/dir1/dir2/**");
或
FileSystems.getDefault().getPathMatcher("glob:D:\\\\dir1\\\\dir2\\\\**");
我不明白这种逃避的魔法。请澄清。
答案 0 :(得分:2)
原因是,\
用于指定许多语言中的转义字符。但不是/
。
例如:
\n
=换行符
\t
=标签
和
\\
= \
为了在字符串中表示\
,您必须使用\\
。因此,每次使用\\
时,它都会被解析为\
。
编辑:
在FileSystems.getDefault().getPathMatcher()
中,它需要一个模式。模式也进行解析。为了将D:\dir1\dir2\**
作为预期路径,您必须使用\\
代替\
,并且因为它被指定为模式,\
的每个\\
1}}应表示为\\
。最后,每个\
都表示为\\\\
。
查找 regular expressions了解更多信息,
答案 1 :(得分:2)
如您所知,在正则表达式中,需要转义反斜杠才能获得文字反斜杠:\\ -> '\'
。在getPathMatcher()
方法中,反斜杠已用于转义特殊字符:
反斜杠字符(
\
)用于转义否则将被解释为特殊字符的字符。
因此,为了生成文字'\\'
,您必须转义每个反斜杠,从而生成\\\\
。令人困惑,不是吗?