0

Java チュートリアルから: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

次の例には両方とも冗長性が含まれています。

/home/./joe/foo
/home/sally/../joe/foo

正規化メソッドは、「.」を含む冗長な要素をすべて削除します。または「ディレクトリ/..」の出現。前の例はどちらも次のように正規化されます。

 /home/joe/foo

2 つの「冗長な」パスはどこを指し、どのようにこのように「正規化」できますか?

4

3 に答える 3

4

まず.、現在のディレクトリを..意味し、ディレクトリを上に移動することを意味します。の

/home/./joe/foo

.現在のディレクトリはそのコンテキストの「ホーム」であるため、/home を指します。別の例として、これらは同じです

/foo/././././.
/foo

/home/sally/../joe/foo

/sally/.. は冗長です。「このディレクトリに入ってから、一歩下がってください」と言っているようなものです。これと同じです:

/home/joe/foo
于 2013-05-14T01:36:30.713 に答える
0

パスを「/」で分割して、その後処理することができます。

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] = "";
    }
}

これにより、冗長な要素が削除され、配列が再度結合されます。

于 2013-05-14T07:50:28.797 に答える