当前位置: 首页 > 面试题库 >

Java路径中的星号

冯胤
2023-03-14
问题内容

我正在阅读《 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中一样,不用担心,如果是,或: 我期待那会加入我的当前目录与制作。我怎么了? 问题答案: 即使使用该方法获得当前目录的原始解决方案也是如此。但是建议将该属性用于当前目录和主目录。 输出: 从Java Path类文档中: 如果Path仅由一个name元素组成,则将其视为空路径。使用的文件系统访问文件。 为什么起作用 当将空字符串传递给时,返

  • 问题内容: 我正在制作一个资源查看器应用程序,但是问题是我尝试匹配 。 如果资源网址像这样的话,它可以很好地工作,但是我怎么可以这样做。 我不知道会走多少路,所以我不能。 有任何想法吗? 问题答案: 从angular-1.2开始,您可以执行以下操作: http://code.angularjs.org/1.2.0/docs/api/ngRoute.$routeProvider 特别是文档提供了以下

  • 我在设置Java开发环境时遇到了一个问题。在过去,我安装了Java,然后安装了IDE,然后开始编写代码。我现在开始设置我的笔记本电脑,使用命令行编译和记事本作为我的代码编辑器。这是我第一次尝试纠正错误。 我运行javac,它创建了我的。类文件没有问题,但是我尝试用java A运行类文件,它抛出了一个错误: c:\工作区 我的类路径设置为C:\Program Files\Java\jdk-14.0.

  • 在Mac中安装了Java7。 http://download.oracle.com/otn-pub/java/jdk/7u7-b10/jdk-7u7-macosx-x64.dmg 我从Oracle下载了安装程序,安装成功了。但我在/系统/库里找不到

  • 问题内容: 我尝试通过Java内置功能为此()建立一个https连接。但是我得到这个异常: 我的证书链是: 所使用的证书通过“路径发现”的含义是正确的。信任锚是根证书,该根证书导入到我系统上的Java密钥库中。中间证书不是…但是 中间证书由我信任的根签名-因此,我也信任中间证书。 Web服务器证书已使用我信任的中间证书签名(第1点) 那么验证必须成功通过?我做错什么了吗? 我在某处读到了这个: 浏

  • 但它显示错误的路径:/usr/local/bin/javavm 而我需要有以下路径:/usr/local/openjdk8/bin/java 我尝试给出export命令:export java_home=/usr/local/openjdk8/,但问题仍然相同。 我不想对它进行硬编码,也不想使用其他命令,如或,因为脚本在Linux中得到了预期的结果,而只是在FreeBSD机器上出现了问题。 我也不