Java 使用系统文件分隔符符号拆分文件名

Java 使用系统文件分隔符符号拆分文件名,java,regex,windows,file-io,Java,Regex,Windows,File Io,我有一个完整的文件路径,我想得到文件名 我正在使用以下说明: String[] splittedFileName = fileName.split(System.getProperty("file.separator")); String simpleFileName = splittedFileName[splittedFileName.length-1]; 但在Windows上,它提供: java.util.regex.PatternSyntaxException: Unexpected

我有一个完整的文件路径,我想得到文件名

我正在使用以下说明:

String[] splittedFileName = fileName.split(System.getProperty("file.separator"));
String simpleFileName = splittedFileName[splittedFileName.length-1];
但在Windows上,它提供:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^

我能避免这个例外吗?有更好的方法吗?

问题是必须对
\
进行转义,才能将其用作正则表达式中的反斜杠。您应该使用,或者首先使用:

或者更好地使用
文件
API来实现:

File file = new File(fileName);
String simpleFileName = file.getName();

编写文件名时,应使用
System.getProperty(“file.separator”)

读取文件名时,可以使用正斜杠或反斜杠作为文件分隔符

您可能希望尝试以下操作:

fileName = fileName.replace("\\", "/");
String[] splittedFileName = fileName.split("/"));
String simpleFileName = splittedFileName[splittedFileName.length-1];

首先,对于这个特定的问题,我建议使用java.util.File类而不是正则表达式

也就是说,您遇到的问题的根源是反斜杠字符“\”表示Java正则表达式中的转义序列。现在的情况是,正则表达式解析器看到反斜杠,并期望在它后面有另一个字符来完成转义序列。解决这个问题的最简单方法是使用java.util.regex.Pattern.quote()方法,该方法将转义给定字符串中的任何特殊字符

通过此更改,您的代码将变为:

String splitRegex = Pattern.quote(System.getProperty("file.separator"));
String[] splittedFileName = fileName.split(splitRegex);
String simpleFileName = splittedFileName[splittedFileName.length-1];

另一个更简单的方法是

File f = new File(path);
String fileName = f.getName();

我相信,如果路径与平台兼容,这是可行的,也就是说,不确定路径“c:\file?txt”是否能在Linux上运行。

谢谢@ Gilbert Le Blanc,一段好代码!简单和伟大的作品!链接到服务器的链接已断开。希望这一次能持续更长时间。
File f = new File(path);
String fileName = f.getName();