web-dev-qa-db-ja.com

Java 7パスの拡張子を確認する方法

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を返すようです。これは私にとって実用的ではありません。

では、パスのファイル拡張子を確認するにはどうすればよいですか?

65
Thunderforge

Java NIOの PathMatcher が提供する FileSystem.getPathMatcher(String syntaxAndPattern)

PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.Java");

Path filename = ...;
if (matcher.matches(filename)) {
    System.out.println(filename);
}

詳細については、 ファイルの検索 チュートリアルを参照してください。

68
fan

Pathクラスには「拡張子」という概念はありません。おそらくファイルシステム自体にはないからです。そのため、そのString表現を確認し、それがで終わるかどうかを確認する必要があります。  5文字列.Java".Java"".Java"など、大文字と小文字が混在する場合は、単純なendsWithとは異なる比較が必要であることに注意してください。

path.toString().toLowerCase().endsWith(".Java");
61

簡単なソリューション:

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
12
Pero122

これをPathオブジェクト自体で直接行う方法はありません。

私が見ることができる2つのオプションがあります:

  1. パスをファイルに変換し、File.getName()によって返された文字列でendsWithを呼び出します
  2. PathでtoStringを呼び出し、そのStringでendsWithを呼び出します。
2
Mark