前言
項目部署到生產環境(CentOS 7)後在運行過程中多了一些不明文件目錄,如下圖:
項目中有相關的下載功能,所以需要在服務器端創建目錄,但很明顯創建失敗了,不難發現圖中的路徑分隔是和windows操作系統一致的反斜杠:
但很遺憾在Linux操作系統中路徑之間的分隔符和windows是有區別的,下面具體看看這兩種操作系統關於文件路徑的區別以及我們如何在程序中拼接同時適配這兩個操作系統的路徑字符串。
windows與linux的路徑分隔符
在Windows中我們拼接路徑時是使用反斜杠的,而在java程序中需要使用雙反斜杠,因為第一個反斜杠會被當作轉義字符,如下圖所示:
但是類似的程序放在Linux中就會報錯,因為Linux中文件路徑分隔符並不是反斜杠,而是正斜杠,如下圖所示:
搞清楚了區別和問題,最後看看如何在程序中拼接路徑以達到同時適配兩種操作系統,其實也很簡單,File類提供了一個靜態常量——separator。
利用separator拼接目錄
如題,那麼我們將分隔符統統換成File.separator來分別看一下運行結果,首先是Windows系統:
如上圖所示,可以清楚看到此時separator的值是雙反斜杠,接下來再看一下Linux系統中的separator:
如上圖所示,可以清楚的看到打印出的separator是正斜杠,通過separator即可完美的解決操作系統之間路徑分隔符導致的問題,所以在java程序中盡量通過separator來取代斜杠來拼接路徑字符串,尤其是應用服務器集群中既有windows服務器,又有linux服務器時,這一點尤為重要。
總結
簡單記錄一下這個Java文件路徑相關的問題,希望對遇到同樣問題的同學有所幫助,The End。