转换绝对路径名称作为子路径的最佳方法是什么?

时间:2015-04-01 17:01:27

标签: java absolute-path

我正在使用Java编写备份程序,我想根据源的绝对路径名将文件和目录保存到备份目标。

备份程序应该在不同的操作系统(Unix,Windows,Mac OS X)下工作,所以我需要转换源文件和目录的绝对路径名。

所以最后我想将绝对源路径转换为目标的常规子路径。让我举几个例子。

的Unix
绝对源路径: / home / thomas / data
目的地路径: / backup
有效目的地: / backup / home / thomas / data


绝对源路径: c:\ Documents and Settings \ thomas
目的地路径: e:\ backup
有效目的地: e:\ backup \ c \ Documents and Settings \ thomas

我可以使用字符串替换操作但我希望遇到一些麻烦并开始一个永无止境的纠正故事。

我认为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)。

也许任何人对我有想法或暗示,或者知道已经完成我所寻求的图书馆。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Java 7或更高版本,则Paths类及其方法可能会有用。这里有很好的概述:https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

特别针对您的用例,您需要subpath(获取路径的一部分)和resolve(组合两个路径)。我会尝试这样的事情:

Path backupRoot = Paths.get("/backup");
Path docRoot = Paths.get("/home/user1/docs");
// This line gets the full doc path without the root
Path docs = docRoot.subpath(0, docRoot.getNameCount());
// This line creates the path "/backup/home/user1/docs"
Path backupDocs = backupRoot.resolve(docs);