35

我有一个String提供文件的绝对路径(包括文件名)。我只想获取文件名。最简单的方法是什么?

它需要尽可能通用,因为我无法提前知道 URL 是什么。我不能简单地创建一个 URL 对象并使用getFile()——尽管如果可能的话那将是理想的——因为它不一定是http://前缀,它可能是 c:/ 或类似的东西。

4

5 回答 5

81
new File(fileName).getName();

或者

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

请注意,第一个解决方案取决于系统。它只考虑系统的路径分隔符。因此,如果您的代码在 Unix 系统上运行并接收 Windows 路径,它将无法工作。处理 Internet Explorer 发送的文件上传时就是这种情况。

于 2009-06-18T07:37:50.200 回答
23
new File(absolutePath).getName();
于 2009-06-18T07:38:58.027 回答
18

Apache Commons IO提供了 FilenameUtils 类,它为您提供了一组非常丰富的实用程序函数,用于轻松获取文件名的各种组件,尽管 java.io.File 类提供了基础知识。

于 2009-06-18T07:39:17.170 回答
16

来自Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);
于 2012-11-13T15:00:49.440 回答
3

这里有 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");
于 2017-08-03T17:20:55.547 回答