ファイルへの絶対パス(ファイル名を含む)を提供するString
があります。ファイルの名前だけを取得したい。これを行う最も簡単な方法は何ですか?
URLが何であるかを事前に知ることができないため、できるだけ一般的なものにする必要があります。単にURLオブジェクトを作成してgetFile()
を使用することはできません-可能であれば理想的でしたが、それは必ずしもhttp://
プレフィックスはc:/または同様のものです。
new File(fileName).getName();
または
int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;
最初のソリューションはシステムに依存していることに注意してください。システムのパス区切り文字のみが考慮されます。したがって、コードがUnixシステムで実行され、Windowsパスを受け取った場合、機能しません。これは、Internet Explorerによって送信されるファイルアップロードを処理する場合です。
new File(absolutePath).getName();
Apache Commons IO はFilenameUtilsクラスを提供します。これは、ファイル名のさまざまなコンポーネントを簡単に取得するための非常に豊富なユーティリティ関数セットを提供しますが、Java.io.Fileクラスは基本を提供します。
から Apache Commons IO FileNameUtils
String fileName = FilenameUtils.getName(stringNameWithPath);
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");