1. 概要

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

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

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

2. ファイル拡張子の取得

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

  • makefile ファイルなど、ファイル名に拡張子がない場合
  • また、ファイル名が.gitignore.DS_Store。などの拡張子のみで構成されている場合

2.1. シンプルな文字列処理アプローチ

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

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

このメソッドは、ドット’。’をチェックします。 指定されたファイル名での出現。

存在する場合は、ドット’。’の最後の位置を検索します。 その後の文字、最後のドット’。’の後の文字を返します。 ファイル拡張子として知られています。

特殊なケース:

  1. 拡張子なし–このメソッドは空の文字列を返します
  2. 拡張子のみ–このメソッドは、ドットの後にStringを返します。 「gitignore」

2.2. ApacheCommonsIOのFilenameUtils.getExtension

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

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

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

メソッドgetExtension(String)は、指定されたファイル名が空かどうかをチェックします。

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

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

このメソッドは、UnixまたはWindows形式のファイルを処理する別のメソッド indexOfLastSeparator(String)、を使用して、最後のドットの後にディレクトリ区切り文字がないことも確認します。

特殊なケース:

  1. 拡張子なし–このメソッドは空の文字列を返します。
  2. 拡張子のみ–このメソッドは、ドットの後にStringを返します。 「gitignore」

2.3. グアバライブラリの使用

この最後のアプローチでは、Guavaライブラリを使用して拡張機能を見つけます。

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

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

最新の依存関係については、 MavenCentralを確認できます。

ライブラリを追加した後、そのgetFileExtensionメソッドを使用するだけです。

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

メソッドgetFileExtension(String)は、最初に、指定されたファイル名が空であるかどうかをチェックします。

ファイル名が空でない場合は、指定されたファイル名を抽象パス名に変換してファイルインスタンスを作成し、ファイルのを呼び出します。 ] getName()メソッド。このメソッドは、この抽象パス名で示されるファイルの名前を返します。指定されたファイル名が空の場合は空の文字列を返します。

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

特殊なケース:

  1. 拡張なし–このメソッドは空のStringを返します
  2. 拡張のみ–このメソッドは、ドットの後にStringを返します。 「gitignore」

3. 結論

Apache CommonsGuavaのどちらかを選択する場合、両方のライブラリにはいくつかの共通機能があり、代替機能にはない機能もあります。

これは、特定の機能が必要な場合は、それを備えた機能を選択することを意味します。 それ以外の場合、さらにカスタムシナリオが必要な場合は、必要なことを最大限に実行するシナリオを選択し、それを独自の実装で自由にラップして、目的の結果を得ることができます。

また、Githubでこの記事のすべての例を確認してください。