从Java中的文件位置获取文件名
我有一个从Java中的文件位置获取文件名,java,url,string,path,filenames,Java,Url,String,Path,Filenames,我有一个字符串,它提供了文件的绝对路径(包括文件名)。我只想知道文件名。最简单的方法是什么 它需要尽可能的一般,因为我不能事先知道什么网址将是。我不能简单地创建一个URL对象并使用getFile()——尽管如果可能的话,这将是理想的——因为它不一定是http://前缀,它可以是c://或类似的东西 new File(fileName).getName(); 或 请注意,第一个解决方案依赖于系统。它只考虑系统的路径分隔符字符。因此,如果您的代码在Unix系统上运行并接收到Windows路径,它将
字符串
,它提供了文件的绝对路径(包括文件名)。我只想知道文件名。最简单的方法是什么
它需要尽可能的一般,因为我不能事先知道什么网址将是。我不能简单地创建一个URL对象并使用getFile()
——尽管如果可能的话,这将是理想的——因为它不一定是http://
前缀,它可以是c://或类似的东西
new File(fileName).getName();
或
请注意,第一个解决方案依赖于系统。它只考虑系统的路径分隔符字符。因此,如果您的代码在Unix系统上运行并接收到Windows路径,它将无法工作。处理由Internet Explorer发送的文件上载时就是这种情况。提供了FilenameUtils类,该类为您提供了一组非常丰富的实用程序函数,用于轻松获取文件名的各种组件,尽管java.io.file类提供了基础。来自
new File(absolutePath).getName();
这里有两种方法(都是独立于操作系统的)
使用路径
:从1.7开始
Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();
总是使用它。没什么好抱怨的。第一个replaceAll参数是错误的,因为斜杠在Java字符串和正则表达式中都是转义字符。它应该是fileName.replaceAll(“\\\\”,“/”)。此外,尽管子字符串不应该是驼峰大小写的,并且应该是“subString”所有小写以达到本机字符串API的subString方法,但这是如何被接受的这么多次的,除非您在这里使用了其他东西,但这可能需要注意。我发现第一个选项(新文件(文件名).getName())并非在所有实现上都是一样的。我发现在Windows上运行的java与在Linux上运行的java之间存在差异。具体而言,Linux实现将\作为文件名的一部分,并且没有将其视为分隔符。如果您想要跨平台实现,则第二个选项更安全。这个答案如何解释接受了这么多次,当没有人同意它有多好(/坏?)时…而使用Commons IO的一行程序在另外两个答案中可用?@kd304,正如你所建议的“项目截止日期教你打字快”,但你打字越少,你就越快!FilenameUtils.getName(path)是最简单/最快/最好的方式。。。
String fileName = FilenameUtils.getName(stringNameWithPath);
Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");