考虑以下代码
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
可能不存在(尚未)
答案 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