我有String
提供文件的绝对路径(包括文件名)。我想得到文件的名称。最简单的方法是什么?
它需要尽可能通用,因为我事先无法知道URL是什么。我不能简单地创建一个URL对象并使用getFile()
- 所有这些都是理想的,如果可能的话 - 因为它不一定是http://
前缀,它可以是c:/或类似的东西。
答案 0 :(得分:80)
new File(fileName).getName();
或
int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;
请注意,第一个解决方案是系统相关的。它只考虑系统的路径分隔符。因此,如果您的代码在Unix系统上运行并且接收Windows路径,那么它将无法工作。处理Internet Explorer发送的文件上载时就是这种情况。
答案 1 :(得分:23)
new File(absolutePath).getName();
答案 2 :(得分:18)
Apache Commons IO提供了FilenameUtils类,它为您提供了一组非常丰富的实用程序函数,可以轻松获取文件名的各种组件,尽管java.io.File类提供了基础知识。
答案 3 :(得分:14)
来自Apache Commons IO FileNameUtils
String fileName = FilenameUtils.getName(stringNameWithPath);
答案 4 :(得分:1)
以下是两种方式(两种方式都与操作系统无关。)
使用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");