this Java Oracleチュートリアルから直接:
2つのアスタリスク**は*と同じように機能しますが、ディレクトリの境界を越えます。この構文は通常、完全なパスの照合に使用されます。
誰かがそれから実際の例を行うことができますか? 「ディレクトリの境界を越える」とはどういう意味ですか?ディレクトリの境界を越えて、ルートからgetNameCount()-1
までファイルをチェックするようなものを想像します。再びpracticeの*と**の違いを説明する実際の例は素晴らしいでしょう。
FileSystem#getPathMatcher()
のjavadocには、かなり良い例と説明があります
*.Java Matches a path that represents a file name ending in .Java
*.* Matches file names containing a dot
*.{Java,class} Matches file names ending with .Java or .class
foo.? Matches file names starting with foo. and a single character extension
/home/*/* Matches /home/gus/data on UNIX platforms
/home/** Matches /home/gus and /home/gus/data on UNIX platforms
C:\\* Matches C:\foo and C:\bar on the Windows platform (note that the backslash is escaped; as a string literal in the Java Language the pattern would be "C:\\\\*")
したがって、/home/**
は/home/gus/data
と一致しますが、/home/*
は一致しません。
/home/*
は、/home
ディレクトリ内のすべてのファイルを直接言っています。
/home/**
は、/home
内の任意のディレクトリにあるすべてのファイルを言っています。
*
と**
の例。現在の作業ディレクトリが/Users/username/workspace/myproject
であると仮定すると、以下は./myproject
ファイル(ディレクトリ)とのみ一致します。
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:/Users/username/workspace/*");
Files.walk(Paths.get(".")).forEach((path) -> {
path = path.toAbsolutePath().normalize();
System.out.print("Path: " + path + " ");
if (pathMatcher.matches(path)) {
System.out.print("matched");
}
System.out.println();
});
**
を使用すると、そのディレクトリ内のすべてのフォルダーとファイルが一致します。