Java Path中的星号 [英] Asterisks in Java Path

查看:766
本文介绍了Java Path中的星号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在浏览OCA / OCP Java SE&程序员I& II学习指南。在页52​​0上有一个用于匹配的方法:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆