我在寫一個使用Java的備份程序,我想根據源的絕對路徑名將文件和目錄保存到備份目標。將絕對路徑名轉換爲子路徑的最佳方法是什麼?
備份程序應該在不同的操作系統(Unix,Windows,Mac OS X)下工作,所以我需要轉換源文件和目錄的絕對路徑名。
所以最後我想將絕對源路徑轉換爲目標的常規子路徑。讓我舉一些例子。
的Unix
絕對源路徑:/家庭/托馬斯/數據
目標路徑:/備份
有效目的地:/備份/家庭/托馬斯/數據
Windows
絕對源路徑:c:\ Documents and Settings \ thomas
目標路徑:E:\備份
有效目的地:E:\備份\ C \ Documents和Settings \托馬斯
我可以使用字符串替換操作,但我希望能碰上幾個麻煩,開始一個永無止境的矯正故事。
我認爲Windows環境需要特殊的處理,因爲主要的驅動器號。在* nix下,我可以簡單地連接兩條路徑。另請注意,源路徑可能是Windows下的UNC路徑,如\\ share \ data。
我周圍搜索,發現了幾個類似的問題,但沒有人回答我的問題(例如Is there a Java utility which will convert a String path to use the correct File separator char?或Convert Windows-style path into Unix path)。
也許任何人對我有一個想法或暗示,或者知道一個圖書館已經做我正在尋找的東西。
你嘗試過什麼嗎? – 2015-04-01 17:10:07
查看https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#relativize%28java.nio.file.Path%29 – dhke 2015-04-01 17:14:38
嗯,也許我不明白,但鏈接中的方法可用於計算兩條路徑之間的「關係」。我喜歡的是根據絕對源路徑和目標路徑創建新的子路徑。 – Thorsten 2015-04-01 18:07:06