Java路径中的星号
我正在阅读《 OCA / OCP Java SE和程序员I和II学习指南》。在页520上,有一种用于匹配的方法:
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