如何在Java中编写来自字符串的相对路径

时间:2015-12-30 22:52:30

标签: java shell path

我有以下问题。我正在编写一个模仿Windows命令提示符的程序。例如,用户输入:cd C:\\Intel,在我的代码中,我解决了这个问题:

setCurrentPath(Paths.get(string)); 

其中setCurrentPath是一个将当前路径设置为输入路径的方法(字符串)。我的问题是,如果输入的路径是相对的,我该如何设置新的路径。例如,如果我当前在C:\\Intel,并且用户想要转到C:\\Intel\\Logs并输入:cd Logs(而不是C:\\Intel\\Logs)。我想有一些用Java构建的方法可以帮助我,但我只学习了几个月的Java,所以我不知道它们。请注意,我将威胁路径视为字符串。

2 个答案:

答案 0 :(得分:2)

您可以测试来自用户的路径是否是绝对路径,并根据结果直接设置,或使用Path.resolve

样本:

Path currentPath = Paths.get("C:\\projects\\project1");
String pathFromUser = "..\\project2";

Path userPath = Paths.get(pathFromUser);

if (userPath.isAbsolute()){
    currentPath = userPath;
}else{//is relative
    currentPath = currentPath.resolve(userPath).normalize();
}

System.out.println(currentPath);

输出:C:\projects\project2

答案 1 :(得分:1)

使用isAbsolute()方法检查输入,如果resolvePath方法返回false,则使用isAbsolute()

https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#isAbsolute()

下面针对解决方法描述了必须检查路径是否为绝对路径的原因:

Path resolve(Path other)
  

根据此路径解析给定路径。如果其他参数是   绝对路径然后这个方法平凡地返回其他。如果是其他的   空路径然后这个方法简单地返回此路径。除此以外   此方法将此路径视为目录并解析   给出了这条道路的道路。在最简单的情况下,给定的路径   没有根组件,在这种情况下此方法加入   给定此路径的路径并返回以此结尾的结果路径   给定的路径。然后给定路径具有根组件   因此,分辨率高度依赖于实现   未指定的。

https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#resolve(java.nio.file.Path)