Java 如何从路径中删除父目录

Java 如何从路径中删除父目录,java,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\..\where\myFile.txt,但我需要的是c:\where\myFil

考虑以下代码

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

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


void myMethodTest() {
    myMethod("..\\elsewhere\\myFile.txt");
}
打印的字符串是
c:\temp\..\where\myFile.txt
,但我需要的是
c:\where\myFile.txt

File.getCanonicalPath()
不会给我想要的,因为当
别处的
是一个符号链接时,它会给我错误的结果

更新了我对示例代码进行了调整,使我的问题更加清晰。文件构造函数的第二个参数可以采用任何可能(或可能不)包含一个或多个
“.\”
字符串的路径。我想获得一个没有“..”元素但不解析sym链接的路径


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

文件upDir=新文件(f.getParent().getParent(),f.getParent())->//C:\where中的父目录

File File=新文件(upDir,f)//在upDir->C:\别处\myFile.txt中创建文件已不存在

文件upDir=新文件(f.getParent().getParent(),f.getParent())->//C:\where中的父目录

File File=新文件(upDir,f)
//在upDir->C:\where\myFile.txt中生成文件

file.getAbsolutePath()
方法不会访问文件系统,因此它不会解析最终的符号链接(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());
}

File.getAbsolutePath()
方法不访问文件系统,因此它不会解析最终的符号链接(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());
}

我刚刚调整了这个问题,添加了一个进一步的要求-该文件将不存在(尚未)。我正在组装一个应用程序,它将从远程服务器下载文件,并试图强制执行它们将存储在的目录,您使用
f.getCanonicalFile().getPath()
如何?这行得通吗?@Krishnan Mahadevan,不行。如上所述,getCanonicalFile()解析符号链接,这是我不想做的do@Stormcloud-我在OSX上做的。我创建了一个指向某个目录的符号链接,然后删除了该目录。我的sym链接如下:
bar->/Users/kmahadev/foo/
(此处
foo
不存在)。然后我运行了
System.err.println(新文件(“/Users/kmahadev/work”,“./bar”).getCanonicalFile().getPath())如果正在解析符号链接,我应该看到一个错误,对吗?我看到的输出是:
/Users/kmahadev/bar
@Krishnan Mahadevan可能是。但这不是我想要解决的问题。如果我执行File(“/myDir”,“someFile”),我希望结果是/myDir/someFile,即使/myDir是指向其他地方的符号链接,我刚刚调整了问题,添加了一个进一步的要求-该文件将不存在(尚未)。我正在组装一个应用程序,它将从远程服务器下载文件,并试图强制执行它们将存储在的目录,您使用
f.getCanonicalFile().getPath()
如何?这行得通吗?@Krishnan Mahadevan,不行。如上所述,getCanonicalFile()解析符号链接,这是我不想做的do@Stormcloud-我在OSX上做的。我创建了一个指向某个目录的符号链接,然后删除了该目录。我的sym链接如下:
bar->/Users/kmahadev/foo/
(此处
foo
不存在)。然后我运行了
System.err.println(新文件(“/Users/kmahadev/work”,“./bar”).getCanonicalFile().getPath())如果正在解析符号链接,我应该看到一个错误,对吗?我看到的输出是:
/Users/kmahadev/bar
@Krishnan Mahadevan可能是。但这不是我想要解决的问题。如果我执行File(“/myDir”,“someFile”),我希望结果是/myDir/someFile,即使/myDir是指向其他地方的sym链接@Sławomir Czaja,很抱歉,但这在一般情况下不起作用。它只在子路径以..开头的情况下有效/我已经更新了问题以使其更清晰,Herhi@Sławomir Czaja,抱歉,这在一般情况下不起作用。它只适用于子路径以..开头的情况/我已更新了问题以使其更清楚