如何从路径中删除父目录

时间:2017-08-08 08:47:38

标签: java

考虑以下代码

void myMethod(String path) {
    File f = new file("c:\\Temp", path);

    System.out.println(f.getAbsolutePath());
}


void myMethodTest() {
    myMethod("..\\elsewhere\\myFile.txt");
}

打印的字符串为c:\temp\..\elsewhere\myFile.txt,但我需要的是C:\elsewhere\myFile.txt

File.getCanonicalPath()不会给我我想要的东西,因为当elsewhere是一个sym链接时它会给我错误的结果

已更新我调整了示例代码,使我的问题更清晰一些。 File构造函数的第二个参数可以采用任何可能(或可能不)包含一个或多个"..\"字符串的路径。我想获得一个没有`.. \ elements但不解析sym链接的路径

已更新(抱歉),文件C:\elsewhere\myFile.txt可能不存在(尚未)

2 个答案:

答案 0 :(得分:2)

File.getAbsolutePath()方法不访问FileSystem,因此它不会解析最终的符号链接(Path.normalize()方法也不会)。

您想要使用的是Path.toRealPath(LinkOptions... options)方法,它将完成这项工作。

void myMethod() {
    File f = new File("c:\\Temp", "..\\elsewhere\\myFile.txt");

    System.out.println(Paths.get(f.getAbsolutePath()).toRealPath());
}

答案 1 :(得分:1)

File upDir = new File(f.getParent().getParent(), f.getParent()); - > // C:\其他的父目录 File file = new File(upDir, f); //在upDir中删除了make文件 - > C:\别处\ MYFILE.TXT