我有一个String
,它提供文件的绝对路径(包括文件名)。我只想得到文件的名称。什么是最简单的方法来做到这一点?从Java中的文件位置获取文件名
它需要尽可能通用,因为我无法预先知道URL的内容。我不能简单地创建一个URL对象,并使用getFile()
--尽管如此,它可能是理想的,因为它不一定是前缀,它可能是c:/或类似的东西。
我有一个String
,它提供文件的绝对路径(包括文件名)。我只想得到文件的名称。什么是最简单的方法来做到这一点?从Java中的文件位置获取文件名
它需要尽可能通用,因为我无法预先知道URL的内容。我不能简单地创建一个URL对象,并使用getFile()
--尽管如此,它可能是理想的,因为它不一定是前缀,它可能是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的百科全书IO:
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
你知道,严格的项目截止日期教你快速打字。 – akarnokd 2009-06-18 07:42:00
第一个replaceAll参数是错误的,因为斜线是Java字符串和正则表达式中的转义字符。它应该是fileName.replaceAll(“\\\\”,“/”)... – Ivan 2012-10-17 14:48:02