为什么在路径中我应该使用双反斜杠但是在glob模式中 - 四倍?

时间:2014-08-12 09:20:35

标签: java io path escaping glob

如果我想在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\\\\**");

我不明白这种逃避的魔法。请澄清。

2 个答案:

答案 0 :(得分:2)

原因是,\用于指定许多语言中的转义字符。但不是/

例如:
\n =换行符
\t =标签

\\ = \

为了在字符串中表示\,您必须使用\\。因此,每次使用\\时,它都会被解析为\

编辑:

FileSystems.getDefault().getPathMatcher()中,它需要一个模式。模式也进行解析。为了将D:\dir1\dir2\**作为预期路径,您必须使用\\代替\,并且因为它被指定为模式,\的每个\\ 1}}应表示为\\。最后,每个\都表示为\\\\

查找 regular expressions了解更多信息,

答案 1 :(得分:2)

如您所知,在正则表达式中,需要转义反斜杠才能获得文字反斜杠:\\ -> '\'。在getPathMatcher()方法中,反斜杠已用于转义特殊字符:

  

反斜杠字符(\)用于转义否则将被解释为特殊字符的字符。

因此,为了生成文字'\\',您必须转义每个反斜杠,从而生成\\\\。令人困惑,不是吗?