【问题标题】:How to program relative path from string in Java如何在Java中从字符串编程相对路径
【发布时间】:2016-04-04 22:57:46
【问题描述】:

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

setCurrentPath(Paths.get(string)); 

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

【问题讨论】:

    标签: java shell path


    【解决方案1】:

    您可以测试来自用户的路径是否为绝对路径,并根据结果直接设置它,或使用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

    【讨论】:

    • 这是否适用于:cd ..?因为在我的代码中它只是更深入。例如,如果我在 C:\Intel\Logs 并写入 cd .. 它会转到:C\Intel\Logs\..
    • 有趣。它在我的 Windows 机器上运行良好。也许尝试使用不同的路径分隔符,所以不要使用\ 使用/。它似乎在这里工作:ideone.com/efe1ur
    • 它有效,我正在试验代码并删除了 .normalize()。现在,当我将其取回时,它可以正常工作。非常感谢您的时间和精力。
    【解决方案2】:

    使用isAbsolute() 方法检查输入,如果isAbsolute() 方法返回false,则使用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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-04
      • 2022-08-17
      • 2023-03-31
      • 2010-10-14
      • 2011-06-27
      • 2014-10-29
      • 2020-05-18
      • 1970-01-01
      相关资源
      最近更新 更多