web-dev-qa-db-ja.com

Javaのファイルの場所からファイル名を取得する

ファイルへの絶対パス(ファイル名を含む)を提供するStringがあります。ファイルの名前だけを取得したい。これを行う最も簡単な方法は何ですか?

URLが何であるかを事前に知ることができないため、できるだけ一般的なものにする必要があります。単にURLオブジェクトを作成してgetFile()を使用することはできません-可能であれば理想的でしたが、それは必ずしもhttp://プレフィックスはc:/または同様のものです。

34
Ankur
new File(fileName).getName();

または

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;

最初のソリューションはシステムに依存していることに注意してください。システムのパス区切り文字のみが考慮されます。したがって、コードがUnixシステムで実行され、Windowsパスを受け取った場合、機能しません。これは、Internet Explorerによって送信されるファイルアップロードを処理する場合です。

80
akarnokd
new File(absolutePath).getName();
23
victor hugo

Apache Commons IO はFilenameUtilsクラスを提供します。これは、ファイル名のさまざまなコンポーネントを簡単に取得するための非常に豊富なユーティリティ関数セットを提供しますが、Java.io.Fileクラスは基本を提供します。

18
skaffman

から Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);
16

2つの方法があります(どちらもOSに依存しません)。

Pathsの使用:1.7以降

Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();

Apache CommonsでFilenameUtilsを使用するIO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
1
Om Prakash Sao