2015-12-30 41 views
0

我有以下问题。我正在编写一个模仿Windows命令提示符的程序。例如用户输入:cd C:\\Intel和在我的代码我解决这样的:如何从Java中的字符串编程相对路径

setCurrentPath(Paths.get(string)); 

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

回答

2

如果从用户的路径是绝对与否,并根据结果直接设置它,或者使用Path.resolve你可以测试。

DEMO:

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

+0

应与这项工作:CD ..?因为在我的代码中它只是更深入。例如,如果我在C:\ Intel \ Logs中并写入cd ..它将转到:C \ Intel \ Logs \ .. – MyNameIsNemo

+1

有趣。它在我的Windows机器上正常工作。也许尝试使用不同的路径分隔符,所以不要使用''''使用'/'。它似乎在这里工作:https://ideone.com/efe1ur – Pshemo

+0

它的工作原理,我正在试验代码并删除.normalize()。现在,当我收回它时,它应该像它应该那样工作。非常感谢您的时间和精力。 – MyNameIsNemo

1

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

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)