【发布时间】:2010-11-03 22:06:12
【问题描述】:
我有一个String,它提供了文件的绝对路径(包括文件名)。我只想获取文件名。最简单的方法是什么?
它需要尽可能通用,因为我无法提前知道 URL 是什么。我不能简单地创建一个 URL 对象并使用 getFile()——尽管如果可能的话,那将是理想的——因为它不一定是 http:// 前缀,它可能是 c:/ 或类似的东西。
【问题讨论】:
标签: java url string path filenames
我有一个String,它提供了文件的绝对路径(包括文件名)。我只想获取文件名。最简单的方法是什么?
它需要尽可能通用,因为我无法提前知道 URL 是什么。我不能简单地创建一个 URL 对象并使用 getFile()——尽管如果可能的话,那将是理想的——因为它不一定是 http:// 前缀,它可能是 c:/ 或类似的东西。
【问题讨论】:
标签: java url string path filenames
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();
在 Apache Commons IO 中使用 FilenameUtils:
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
【讨论】: