為了跨平臺分割路徑斜杠。
1.java中\(zhòng)\表示一個\,所以要分割c:\a\document\c.gif這樣的路徑,需要split("\\\\"),考慮到linux系統(tǒng),一般可以使用
filePath.replaceAll("\\\\","/").split("/")來處理。
2.為了更好的跨平臺,可以考慮
String[] subDirs = path.split(File.separator);
但
這種方式是不行的,這里的參數(shù)需要的是一個正則表達式,而Windows系統(tǒng)File.separator是“\”,
這是轉(zhuǎn)義字符不能使用。可以使用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類有很多方法處理路徑問題。