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));
}
このメソッドは、指定されたファイル名にドット「。」が含まれているかどうかを確認します。
存在する場合は、ドットの最後の位置「。」を見つけ、それ以降の文字を返します。最後のドット「。」の後の文字はファイル拡張子と呼ばれます。
-
特殊なケース:**
-
拡張子なし
– このメソッドは空の
String
を返します -
拡張子のみ
– このメソッドはドットの後に
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)を使用してディレクトリ区切り文字がないことも確認します。
-
特殊なケース:**
-
拡張子なし
– このメソッドは空の文字列を返します. -
拡張子のみ
– このメソッドはドットの後に
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)
を使用して、最後に出現した「。」のインデックスを取得します。
-
特殊なケース:**
-
拡張子なし – このメソッドは空の
String
を返します -
拡張子のみ – このメソッドはドットの後に
String
を返します.
-
例えば
“gitignore”
3.まとめ
-
Apacheの
Commons
と
Guava
のどちらかを選ぶとき、どちらのライブラリにも共通の機能がいくつかありますが、それらには他のライブラリにはない機能もあります。
つまり、特定の機能が必要な場合は、それを持っているものを選択するということです。それ以外の場合、より多くのカスタムシナリオが必要な場合は、必要なものを最大限に活用するものを選択し、希望の結果を得るために自分の実装で自由にラップしてください。
また、この記事https://github.com/eugenp/tutorials/tree/master/core-java/src/main/java/com/baeldung/extension[the Github]のすべての例をチェックしてください。