Java路径中的星号

我正在阅读《 OCA / OCP Java SE和程序员I和II学习指南》。在页52​​0上,有一种用于匹配的方法:

public void matches(Path path, String glob){

PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob);

System.out.println(matcher.matches(path));

}

现在,在下一页上有一段使用此方法的代码:

public static void main(String [] args){

Path path1= Paths.get("0*b/test/1");

Path path2 = Paths.get("9\\*b/test/1");

Path path3 = Paths.get("01b/test/1");

Path path4 = Paths.get("0*b/1");

String glob = "glob:[0-9]\\*{A*,b}/**/1";

matches(path1,glob);

matches(path2,glob);

matches(path3,glob);

matches(path4,glob);

}

根据这本书的结果应该是:true false false false

但是,当我尝试运行它时,出现以下异常:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <*> at index 1:       0*b/test/1

at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)

at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)

at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)

at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)

at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)

at java.nio.file.Paths.get(Paths.java:84)

at pathmatcherobjective.PathMatcherObjective.main(PathMatcherObjective.java:63)

Java Result: 1

我的问题是:我错过了设置中的某些内容吗?我需要启用特定功能才能运行此功能吗?还是这本书是错误的?我只为参加Java专业考试而学习,所以我不确定所有内容。

回答:

在Windows操作系统上,*不允许使用该字符作为有效的文件名和目录名。Microsoft Developer

Network上列出的字符也是如此:

您可以使用当前代码页中的任何字符作为名称,包括Unicode字符和扩展字符集(128–255)中的字符,但以下保留字符除外:

  • <(小于)
  • (大于)

  • :(冒号)
  • ”(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • | (垂直杆或管)
  • ?(问号)
  • *(星号)
  • 整数值零,有时也称为ASCII NUL字符。
  • 整数表示形式在1到31之间的字符,但允许这些字符的备用数据流除外。有关文件流的更多信息,请参见文件流。
  • 目标文件系统不允许的任何其他字符。

对于UNIX,请参阅Wikipedia。在POSIX上,允许的字符包括A–Z

a–z 0–9 . _ -,保留为/ null

可能*是允许在OS上运行的示例。

以上是 Java路径中的星号 的全部内容, 来源链接: utcz.com/qa/406618.html

回到顶部