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


83

パス(Java 7で導入)が特定の拡張子で終わっているかどうかを確認したいと思います。私はそのendsWith()ような方法を試しました:

Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
    //Do stuff
}

ただし、path.endsWith(".java")falseを返すため、これは機能していないようです。このendsWith()メソッドは、最後のディレクトリ区切り文字(たとえばbar.java)の後にすべてが完全に一致する場合にのみtrueを返すようですが、これは私には実用的ではありません。

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



1
@assylias、その質問は、からでStringはなく、から拡張機能を見つけるためのものですPath(ただし、で動作しますがPath.toString()、それを必要としない方法を望んでいました)。
サンダーフォージ

ファイル拡張子の概念はOSに依存しているため、ファイルまたはパスでサポートされているとは思いません。
assylias 2013

@assylias:まあ、それは最悪だ。ファイル拡張子の概念は明確に定義されており、Windows / Linux / MacOs / Androidで何度も使用されています。LinuxではWindowsほど重要ではないかもしれませんが、それでもデスクトップおよびサーバーアプリケーションで非常に多く使用されています。
EricDuminil19年

回答:


82

Java NIOのPathMatcherは、FileSystem.getPathMatcher(String SyntaxAndPattern)を提供します

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

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

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


14
私はこれが私のために、アスタリスク、以下の作品が欠落していると思う:PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.java");
ジョシュ

22
また、さまざまなディレクトリを調べている場合は、「glob:**。java」を使用する必要があります
LaGrandMere 2015

1
私にとっては、LaGrandMereのコメントがうまくいきました。@Dave Jarvisが彼のアドバイスを選択された回答にマージできれば、それはNIO-APIの初心者に役立つと思います。Windozeの下:私が使用したい場合はglob:*.java、その後、filename任意の親のパスを含めることはできません。のようなrel / absパスを使用すると、glob:c:/users/muchwow/*.java機能します(\\\\はバックスラッシュとともに使用する必要があることに注意してください)。このパターンglob:**.javaは、親パスに関係なく、*。javaを含むすべてのものを検索するだけです。
JackLeEmmerdeur 2017

67

Pathクラスは、ファイルシステム自体がそれを持っていないためか、「拡張子」の概念を持っていません。そのため、そのString表現をチェックして、4つの 5文字の文字列で終わっているかどうかを確認する必要があります.java。と:endsWithなどの混合ケースをカバーする場合は、単純なものとは異なる比較が必要であることに注意してください。".JAVA"".Java"

path.toString().toLowerCase().endsWith(".java");

15

簡単な解決策:

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

3

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

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

  1. パスをファイルに変換し、File.getName()によって返された文字列でendsWithを呼び出します。
  2. パスでtoStringを呼び出し、その文字列でendsWithを呼び出します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.