Javaでファイルのファイル拡張子を取得する方法

1.概要

このクイックチュートリアルでは、ファイル拡張子をJavaでプログラム的に取得する方法を説明します。私たちはこの問題に対する3つの主要なアプローチに焦点を当てます。

私たちの実装では、最後の「__」の後の文字が返されます。

したがって、簡単な例として、ファイル名が jarvis.txt の場合、ファイルの拡張子として String txt” が返されます。

2.ファイル拡張子を取得する

それぞれのアプローチについて、その実装方法を学び、2つの特別なケースで何が起こるかをフォローアップします。

  • makefile ファイルのように、ファイル名に拡張子がない場合

  • .gitignore のように、ファイル名が拡張子のみで構成されている場合

または .DS Store.__

2.1. 単純な String 処理アプローチ

このアプローチでは、拡張子を見つけるために単純な String 処理アプローチを使用します。

public Optional<String> getExtensionByStringHandling(String filename) {
    return Optional.ofNullable(filename)
      .filter(f -> f.contains("."))
      .map(f -> f.substring(filename.lastIndexOf(".") + 1));
}

このメソッドは、指定されたファイル名にドット「。」が含まれているかどうかを確認します。

存在する場合は、ドットの最後の位置「。」を見つけ、それ以降の文字を返します。最後のドット「。」の後の文字はファイル拡張子と呼ばれます。

  • 特殊なケース:**

    1. 拡張子なし - このメソッドは空の String を返します

    2. 拡張子のみ - このメソッドはドットの後に String を返します.

例えば "gitignore"

2.2. Apache Commons IOの FilenameUtils.getExtension

2番目のアプローチでは、Apache Commons IOライブラリによって提供されるユーティリティクラスを使用して拡張子を見つけます。

public String getExtensionByApacheCommonLib(String filename) {
    return FilenameUtils.getExtension(filename);
}

ここでは、ファイル名の代わりに、ファイル e.g. C:/baeldung/com/demo.java “へのフルパスを指定することもできます。

メソッド getExtension(String) は、与えられた filename が空かどうかを調べます。

  • filename が空またはnullの場合、 getExtension(String filename) は与えられたインスタンスを返します。それ以外の場合は、ファイル名の拡張子を返します。

これを行うには、メソッド indexOfExtension(String) を使用します。次に、 lastIndexof(char) を使用して、最後に出現した「。」を見つけます。これらのメソッドは両方とも FilenameUtils によって提供されます。

このメソッドは、最後のドットの後に別のメソッド__indexOfLastSeparator(String)を使用してディレクトリ区切り文字がないことも確認します。

  • 特殊なケース:**

    1. 拡張子なし - このメソッドは空の文字列を返します.

    2. 拡張子のみ - このメソッドはドットの後に String を返します.

例えば "gitignore"

2.3. グアバ図書館の利用

この最後のアプローチでは、拡張子を見つけるためにGuavaライブラリを使用します。

Guavaライブラリを追加するには、__pom.xmlに次の依存関係を追加します。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>24.1.1-jre</version>
</dependency>

最新の依存関係についてはhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22[Maven Central]。

ライブラリを追加した後は、その getFileExtension メソッドを単純に使用できます。

public String getExtensionByGuava(String filename) {
    return Files.getFileExtension(filename);
}

メソッド getFileExtension(String) は最初に与えられた filename が空かどうかをチェックします。

filename が空でない場合は、指定された filename を抽象パス名に変換して File インスタンスを作成し、その上で File’s getName() メソッドを呼び出します。または指定された filename が空の場合は空の文字列。

この戻り値に基づいて、 String クラスの組み込みメソッド lastIndexOf(char) を使用して、最後に出現した「。」のインデックスを取得します。

  • 特殊なケース:**

    1. 拡張子なし - このメソッドは空の String を返します

    2. 拡張子のみ - このメソッドはドットの後に String を返します.

例えば "gitignore"

3.まとめ

  • Apacheの Commons Guava のどちらかを選ぶとき、どちらのライブラリにも共通の機能がいくつかありますが、それらには他のライブラリにはない機能もあります。

つまり、特定の機能が必要な場合は、それを持っているものを選択するということです。それ以外の場合、より多くのカスタムシナリオが必要な場合は、必要なものを最大限に活用するものを選択し、希望の結果を得るために自分の実装で自由にラップしてください。

また、この記事https://github.com/eugenp/tutorials/tree/master/core-java/src/main/java/com/baeldung/extension[the Github]のすべての例をチェックしてください。