本篇講述java編程中,怎樣解決跨平台時,因不同系統中分隔符不同導致的文件或路徑找不到的問題
首先來看兩個例子:
一、linux系統和windows系統中的文件路徑:
Linux系統:
Windows系統:
可以看到Linux系統中,路徑中的文件名分隔符是"/",而Windows中是"\"
二、linux系統和windows系統中的path路徑:
Linux系統:
.:%JAVA_HOME%\lib:%JAVA_HOME%\lib\tools.jar:%JAVA_HOME%\jre\lib\rt.jar:
Windows系統:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar;
同樣,可以看到Linux系統中,path間的分隔符是":"(冒號),而Windows中是";"(分號)
因為分隔符的不同,我們在編程時就不能硬性制定文件路徑或path之間的分隔符,因為這會導致跨平台時出現找不到文件或路徑的錯誤,
在java中是這樣解決的,jdk中有對應的方法,可以根據當前系統類型動態地獲取文件或path的分隔符,下面是使用方法及源碼中的相關描述:
一、獲取文件路徑中的文件名分隔符:
File.separator;
下面開始追蹤源碼:
第一步:
系統相關的默認名稱分隔符。為了方便它被表示為一個字符串,該字符串只包含一個字符,即separatorChar
第二步:
系統相關的默認名稱分隔符,這個字段被初始化為包含系統屬性file.separator值的第一個字符,在UNIX系統中是”/”,在Windows系統中是”\”
第三步:
FileSystem對象表示當前平台的本地文件系統
第四步:
返回本地文件系統的名稱分隔符
二、獲取path中的分隔符:
File.pathSeparator
第一步:
系統相關的路徑分隔符,為了方便被表示為一個字符串,這個字符串是一個單獨的字符,即pathSeparatorChar
第二步:
系統相關的路徑分隔符。這個字段被初始化為系統屬性path.separator值的第一個字符,這個字符被用來分隔以列表形式給定的文件序列的文件名稱,
在UNIX系統中是冒號(:),在Windows系統中是分號(;)
第三步:
FileSystem對象表示當前平台的本地文件系統
第四步:
返回本地文件系統的路徑分隔符
所以在java編程中,遇到文件和path等操作時,為了跨平台時不引起因分隔符導致的錯誤,就要調用這兩個方法來進行文件路徑或path的拼接。
本系列為java編程相關問題,未完待續......