为了跨平台分割路径斜杠。
1.java中\\表示一个\,所以要分割c:\a\document\c.gif这样的路径,需要split("\\\\"),考虑到linux系统,一般可以使用
filePath.replaceAll("\\\\","/").split("/")来处理。
2.为了更好的跨平台,可以考虑
String[] subDirs = path.split(File.separator);
但
这种方式是不行的,这里的参数需要的是一个正则表达式,而Windows系统File.separator是“\”,
这是转义字符不能使用。可以使用Pattern.quote
:
path.split(Pattern.quote(File.separator));还有注意使用Matcher.quoteReplacement
,示例:
System.out.println(
"O.M.G.".replaceAll(".", "!")
); // prints "!!!!!!"
System.out.println(
"O.M.G.".replaceAll(Pattern.quote("."), "!")
); // prints "O!M!G!"
System.out.println(
"Microsoft software".replaceAll("so", "$0")
); // prints "Microsoft software"
System.out.println(
"Microsoft software".replaceAll("so", Matcher.quoteReplacement("$0"))
); // prints "Micro$0ft $0ftware"
注意:使用File.separator跨平台时注意代码jvm的平台可能和要处理路径的平台不同,所以使用类似filePath.lastIndexOffilePath(File.separator)来处理路径是存在bug的,如果filePath=“/home/a/b”,而代码是在windows上运行,返回-1.
apache的commons-io 包中的FilenameUtils类有很多方法处理路径问题。