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

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

1. 概要

このクイックチュートリアルでは、Javaでプログラムでファイル拡張子を取得する方法を示します。 We’ll focus on three major approaches to the problem.

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

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

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

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

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

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

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

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

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

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

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

特殊なケース:

  1. No extension –このメソッドは空のStringを返します

  2. Only extension –このメソッドは、ドットの後にStringを返します。 “gitignore”

2.2. Apache Commons IOからのFilenameUtils.getExtension

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

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

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

メソッドgetExtension(String)は、指定されたfilenameが空であるかどうかをチェックします。

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

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

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

特殊なケース:

  1. No extension –このメソッドは空の文字列を返します。

  2. Only extension –このメソッドは、ドットの後にStringを返します。 “gitignore”

2.3. Guavaライブラリの使用

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

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


    com.google.guava
    guava
    24.1.1-jre

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

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

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

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

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

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

特殊なケース:

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

  2. 拡張のみ–このメソッドは、ドットの後にStringを返します。 “gitignore”

3. 結論

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

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

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