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]のすべての例をチェックしてください。