ひよっこPGのブログ

主に、技術メモや英語たまにギター関連のことも書いているブログです。

Java ファイルパスからファイル名のみ取得 Windows / Unix対応

ファイルパスからファイル名を取得する場合、Javaの標準ライブラリを使うと
下記のような感じで取得可能。

String path = "C:\\test\\aaa.txt";
File file = new File(path);
file.getName();
//=> "aaa.txt"

ファイルのパスからファイル名を取得するには (basename) | hydroculのメモ


でもこの場合、下記の条件だと上手く取得できない。

Linuxで動作しながら、Windowsのパス形式を渡すと下記のような実行結果になる。

String path = "C:\\test\\aaa.txt";
File file = new File(path);
file.getName();
//=> "C:\\test\\aaa.txt"

動作環境に影響されずに、Windows / Unixのパス形式どちらも対応させるためにはどうすればよいか?

ApacheCommonsの FilenameUtils.getName()を参考にしました。
commons-io/FilenameUtils.java at master · apache/commons-io · GitHub

final char UNIX_SEPARATOR = '/';
final char WINDOWS_SEPARATOR = '\\';

String path = "C:\\test\\aaa.txt";
final int lastUnixPos = path.lastIndexOf(UNIX_SEPARATOR);
final int lastWindowsPos = path.lastIndexOf(WINDOWS_SEPARATOR);
int point = Math.max(lastUnixPos, lastWindowsPos);
path.substring(point + 1);
//=> "aaa.txt"