我有一个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 种方式(两者都是独立于操作系统的。)
使用Paths
:从 1.7 开始
Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();
FilenameUtils
在 Apache Commons IO 中使用:
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");