Java Path中的星号 [英] Asterisks in Java Path
问题描述
我正在浏览OCA / OCP Java SE&程序员I& II学习指南。在页520上有一个用于匹配的方法:
I am going through the OCA/OCP Java SE & Programmer I & II Study Guide. On page 520 there is a method to use for matching:
public void matches(Path path, String glob){
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob);
System.out.println(matcher.matches(path));
}
现在,在下一页上有一段代码可供使用这个方法:
Now, on the next page there is a piece of code that makes use of this method:
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
According to the book the result should be: true false false false
然而,当我尝试运行它时,我得到以下异常:
However, when I attempt to run it I get the following exception:
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专业考试,所以我不确定。
My question is: Have I missed something in the set up? Do I need to have something specific enabled in order to run this? Or is the book just wrong? I am only studying for the Java Professional exam so I'm not sure on everything.
推荐答案
在Windows操作系统上,字符 *
不允许有效文件和目录名称。 Microsoft Developer Network :
On windows operating system the character *
is not allowed for valid file and directory names. So do the characters listed on the Microsoft Developer Network:
您可以使用当前代码页中的任何字符作为名称,
包括扩展名中的Unicode字符和字符字符
设置(128-255),以下保留字符除外:
You can use any character in the current code page for a name, including Unicode characters and characters in the extended character set (128–255), except for the following reserved characters:
- < (小于)
- >(大于)
- :(冒号)
- (双引号) )
- /(正斜杠)
- \(反斜杠)
- |(竖线或竖线) )
- ?(问号)
- *(星号)
- 整数值零,有时指作为ASCII NUL字符。
- 整数表示形式在1到31范围内的字符,但允许使用这些字符
的备用数据流除外。有关文件的更多信息stream,请参阅文件
Streams。 - 目标文件系统不允许的任何其他字符。
- < (less than)
- > (greater than)
- : (colon)
- " (double quote)
- / (forward slash)
- \ (backslash)
- | (vertical bar or pipe)
- ? (question mark)
- * (asterisk)
- Integer value zero, sometimes referred to as the ASCII NUL character.
- Characters whose integer representations are in the range from 1 through 31, except for alternate data streams where these characters are allowed. For more information about file streams, see File Streams.
- Any other character that the target file system does not allow.
对于UNIX,请参阅维基百科。
在POSIX上允许的字符包括 A-Z a-z 0-9。_ -
,保留为 / null
。
For UNIX see Wikipedia.
On POSIX allowed characters include A–Z a–z 0–9 . _ -
, reserved are / null
.
可能是e在操作系统上运行的示例,其中允许 *
。
Probably the examples where run on the OS where *
is allowed.
这篇关于Java Path中的星号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!