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"