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

Mohammad Irfan 2023年10月12日
  1. Java の getExtension() メソッドを使ってファイルの拡張子を取得する
  2. Java の lastIndexOf() メソッドでファイルの拡張子を取得する
  3. Java で文字列解析を用いてファイルの拡張子を取得する
  4. Java の replaceAll() メソッドを用いたファイルの拡張子の取得
  5. Java で contains()lastIndexOf() メソッドを用いてファイルの拡張子を取得する例
  6. Java の三項演算子を用いたファイルの拡張子の取得
  7. Java の stream() メソッドを用いたファイルの拡張子の取得
  8. Java で Regex を用いてファイルの拡張子を取得する
Java でファイルの拡張子を取得する方法

このチュートリアルでは、Java でファイルの拡張子を取得する方法を紹介し、トピックを理解するためのコード例をいくつか挙げています。

Java の getExtension() メソッドを使ってファイルの拡張子を取得する

ファイルの拡張子を取得するには、FilenameUtils クラスの getExtension() メソッドを用いることができます。このメソッドはファイルの拡張子を返します。このメソッドは Apache commons ライブラリに属しているので、プロジェクトで JAR を利用するには Apache の公式サイトからライブラリをダウンロードする必要があります。

import org.apache.commons.io.FilenameUtils;

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "student-records.pdf";
    String fe = FilenameUtils.getExtension(fileName);
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java の lastIndexOf() メソッドでファイルの拡張子を取得する

組み込みのメソッドを使用したくない場合は、lastIndexOf() メソッドを使用してファイルの拡張子を取得するコード例を使用してください。これは文字列メソッドのみを使用する最もシンプルで簡単な方法です。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "student-records.pdf";
    String fe = "";
    int i = fileName.lastIndexOf('.');
    if (i > 0) {
      fe = fileName.substring(i + 1);
    }
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java で文字列解析を用いてファイルの拡張子を取得する

これもまた、(ファイルパスの中にドット(.) がある場合)を含むいくつかのシナリオを含んだ解決策です。このメソッドは、ファイルパスの間にドット(.)があっても正確な結果を返します。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    char ch;
    int len;
    if (fileName == null || (len = fileName.length()) == 0 || (ch = fileName.charAt(len - 1)) == '/'
        || ch == '\\' || ch == '.') {
      fe = "";
    }
    int dotInd = fileName.lastIndexOf('.'),
        sepInd = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
    if (dotInd <= sepInd) {
      fe = "";
    } else {
      fe = fileName.substring(dotInd + 1).toLowerCase();
    }
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java の replaceAll() メソッドを用いたファイルの拡張子の取得

以下の例で行ったように、replaceAll() メソッドを使ってファイルの拡張子を取得することができます。このメソッドでは正規表現を使用し、結果を変数に集めます。

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    fe = fileName.replaceAll("^.*\\.(.*)$", "$1");
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java で contains()lastIndexOf() メソッドを用いてファイルの拡張子を取得する例

contains() メソッドは指定した文字が文字列に含まれているかどうかを調べ、lastIndexOf() メソッドは指定した文字のインデックス値を返し、substring() メソッドに渡してファイルの拡張子を取得します。このコードでは、これらのメソッドを用いてファイルの拡張子を取得しています。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    if (fileName.contains("."))
      fe = fileName.substring(fileName.lastIndexOf(".") + 1);
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java の三項演算子を用いたファイルの拡張子の取得

三項演算子(?, :)に慣れているのであれば、substring()lastIndexOf() メソッドと併用してください。これによりコードの行数を減らし、1つの文で結果を返すことができます。

public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    if (fileName.contains(".")) {
      int i = fileName.lastIndexOf('.');
      fe = i > 0 ? fileName.substring(i + 1) : "";
    }
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java の stream() メソッドを用いたファイルの拡張子の取得

ファイル名をストリームに変換するには Arrays クラスの stream() メソッドを用い、ファイル名をドット(.)から区切るには split() メソッドを用います。以下の例を参照してください。

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    if (fileName.contains(".")) {
      fe = Arrays.stream(fileName.split("\\.")).reduce((a, b) -> b).orElse(null);
    }
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

Java で Regex を用いてファイルの拡張子を取得する

これも regex パッケージを利用した解決策です。この Java の例では、Pattern クラスの compile()matcher() メソッドを用いてファイルの拡張子を取得しています。以下の例を参照してください。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SimpleTesting {
  public static void main(String[] args) {
    String fileName = "folder\s.gr\fg\student-records.pdf";
    String fe = "";
    final Pattern PATTERN = Pattern.compile("(.*)\\.(.*)");
    Matcher m = PATTERN.matcher(fileName);
    if (m.find()) {
      fe = m.group(2);
    }
    System.out.println("File extension is : " + fe);
  }
}

出力:

File extension is : pdf

関連記事 - Java IO

関連記事 - Java File