来自Java教程:http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
以下示例均包含裁员:
/home/./joe/foo
/home/sally/../joe/foo
normalize方法删除任何冗余元素,包括 任何 ”。”或“目录/ ..”出现。前面两个例子 标准化为:
/home/joe/foo
这两条“冗余”路径指向哪里,它们如何像这样被“规范化”?
答案 0 :(得分:4)
首先,.
表示当前目录,..
表示目录。在
/home/./joe/foo
.
指向/ home,因为当前目录在该上下文中是“home”。作为另一个例子,这些是相同的
/foo/././././.
/foo
在
/home/sally/../joe/foo
/ sally / ..是多余的。这就像说,“进入这个目录,然后退后一步”。它与此相同:
/home/joe/foo
答案 1 :(得分:1)
名称“路径”比您想象的更为文字。如果您将文件系统视为以/
为根的树,那么每个路径元素代表您在离开根时向下走的选择。 /home/joe/foo
表示
home
home
内转到joe
joe
内转到foo
路径/home/sally/../joe/foo
表示
home
home
内转到sally
..
)再到home
home
内转到joe
joe
内转到foo
所以你可以看到两条路径让你到达同一个地方。
单个点表示“停留在同一个地方”,因此可以删除由.
组成的路径元素。
答案 2 :(得分:0)
您可以拆分路径wrt“/”并在此之后进行处理。
String[] arr = path.split("/");
for(int i = 0; i < arr.length; i++){
if(arr[i].equals("."))
arr[i] = "";
else if(arr[i].equals("..")){
boolean changed = false;int j = i - 1;
while(arr[j].equals(""))
j--;
if(j >= 0)
arr[j] = "";
}
}
这将删除多余的元素,然后再次组合数组。