Path (Java 7)で導入)が特定の拡張子で終わるかどうかを確認したいので、endsWith()
メソッドをそのように試しました:
_Path path = Paths.get("foo/bar.Java")
if (path.endsWith(".Java")){
//Do stuff
}
_
ただし、path.endsWith(".Java")
はfalseを返すため、これは機能していないようです。 endsWith()
メソッドは、最後のディレクトリセパレータ(たとえば_bar.Java
_)の後にすべてが完全に一致する場合にのみtrueを返すようです。これは私にとって実用的ではありません。
では、パスのファイル拡張子を確認するにはどうすればよいですか?
Java NIOの PathMatcher が提供する FileSystem.getPathMatcher(String syntaxAndPattern) :
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.Java");
Path filename = ...;
if (matcher.matches(filename)) {
System.out.println(filename);
}
詳細については、 ファイルの検索 チュートリアルを参照してください。
Path
クラスには「拡張子」という概念はありません。おそらくファイルシステム自体にはないからです。そのため、そのString
表現を確認し、それがで終わるかどうかを確認する必要があります。 四 5文字列.Java
。 ".Java"
や".Java"
など、大文字と小文字が混在する場合は、単純なendsWith
とは異なる比較が必要であることに注意してください。
path.toString().toLowerCase().endsWith(".Java");
簡単なソリューション:
if( path.toString().endsWith(".Java") ) //Do something
Path.endsWithメソッドを使用するときは注意が必要です。既に述べたように、このメソッドは、Pathオブジェクトのサブ要素と一致する場合にのみtrueを返します。例えば:
Path p = Paths.get("C:/Users/Public/Mycode/HelloWorld.Java");
System.out.println(p.endsWith(".Java")); // false
System.out.println(p.endsWith("HelloWorld.Java")); // true
これをPathオブジェクト自体で直接行う方法はありません。
私が見ることができる2つのオプションがあります: