このJava Oracle チュートリアルから直接:
2 つのアスタリスク ** は * のように機能しますが、ディレクトリの境界を越えます。この構文は通常、完全なパスを照合するために使用されます。
誰かがそれから実際の例を作ることができますか? 「ディレクトリ境界を越える」とはどういう意味ですか? ディレクトリの境界を越えて、ルートからgetNameCount()-1
. 繰り返しますが、実際の * と ** の違いを説明する実際の例は素晴らしいでしょう。
のjavadocにFileSystem#getPathMatcher()
は、かなり良い例と説明があります
*.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();
});
を使用する**
と、そのディレクトリ内のすべてのフォルダーとファイルに一致します。