我在写一个使用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