我有以下问题。我正在编写一个模仿Windows命令提示符的程序。例如,用户输入:cd C:\\Intel
,在我的代码中,我解决了这个问题:
setCurrentPath(Paths.get(string));
其中setCurrentPath
是一个将当前路径设置为输入路径的方法(字符串)。我的问题是,如果输入的路径是相对的,我该如何设置新的路径。例如,如果我当前在C:\\Intel
,并且用户想要转到C:\\Intel\\Logs
并输入:cd Logs
(而不是C:\\Intel\\Logs
)。我想有一些用Java构建的方法可以帮助我,但我只学习了几个月的Java,所以我不知道它们。请注意,我将威胁路径视为字符串。
答案 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)