2009-06-18 45 views
30

我有一个String,它提供文件的绝对路径(包括文件名)。我只想得到文件的名称。什么是最简单的方法来做到这一点?从Java中的文件位置获取文件名

它需要尽可能通用,因为我无法预先知道URL的内容。我不能简单地创建一个URL对象,并使用getFile()--尽管如此,它可能是理想的,因为它不一定是前缀,它可能是c:/或类似的东西。

回答

78
new File(fileName).getName(); 

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

注意,第一解决方案是依赖于系统的。它只考虑系统的路径分隔符。所以如果你的代码在Unix系统上运行并且收到一个Windows路径,它将不起作用。处理由Internet Explorer发送的文件上传时就是这种情况。

+1

你知道,严格的项目截止日期教你快速打字。 – akarnokd 2009-06-18 07:42:00

+10

第一个replaceAll参数是错误的,因为斜线是Java字符串和正则表达式中的转义字符。它应该是fileName.replaceAll(“\\\\”,“/”)... – Ivan 2012-10-17 14:48:02

22
new File(absolutePath).getName(); 
17

Apache Commons IO提供FilenameUtils类,让你相当丰富的易于获得的文件名的各个组成部分的集实用功能,虽然java.io.File类提供了基础。

1

这里有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");