2017-03-04 3 views
0

java.nio.file.Path.relativize()メソッドの理解に苦労しています。私はまた、同じようなquestionが尋ねられていることを知っていますが、その答えは私がその概念を理解するのを助けませんでした。次のコードスニペット考慮NIO.2:relativize()メソッドの理解

Path path = Paths.get("/Users/somename/documents/Test/cat.html"); 
Path path2 = Paths.get("/documents/Test/cat.html"); 
System.out.println((path.relativize(path2))); //output: ../../../../../documents/Test/cat.html 

は、誰かがrelativize()方法は、この例ではどのように機能するか、ステップ・バイ・ステップのアプローチを使用して、私に説明できますか?なぜ5つのディレクトリに移動する必要がありますか?

+0

あなたの現在の理解はどのようなものですか? –

答えて

2

答えの最後にあなたの例に戻ります。

relativize()の目的は、ファイルとフォルダを特定/アクセスする際の基礎となるファイルシステムの構造から独立していることです。どの親フォルダ/パスにアプリケーションフォルダがあるかを知る必要はありません。アプリケーション関連のファイル構造を知っているだけで、relativize()を使って必要なファイルにアクセスすることができます。このファイルはまったく別のフォルダに置くことができます。

はここに例を示します

はあなたがアプリを作成したとしましょう。あなたの簡単なフォルダ構造は、作業パスが

<parent path>/myApp/app/ 

あなたがpicture1.imgにアクセスしたい場合は、今あなたがルートから下へ、何の実際のパス(知っている必要はありませんでアプリを起動する

/myApp/app/app.java 
/myApp/img/picture1.img 
/myApp/sounds/ringtones/bell.mp3 

です実際のフォルダに)。 relativize()が提供する相対パスを使用してください。これはあなたのファイルpicture1.imgにあなたのファイルapp.javaから「相対パス」である

../../img/picture1.img 

になり

Path path = Paths.get("/myApp/app/app.java"); 
Path path2 = Paths.get("/myApp/img/picture1.img"); 
System.out.println((path.relativize(path2))); 

:それはこのようになります。ファイルの略

最初のパスのシンボルapp.java自体

は、フォルダ

に今ある親フォルダ/アプリを

です

/myApp 

ここから、pの後にはしごを下に戻ってきますATH

/img/picture1.img 

あなたは上に示した相対パスを使用してファイルを取得することができますし、あなたは、例えば、可能性があり、そののrealpath()を気にする必要はありません。

/Users/me/apps/myApp/img/picture1.img 

それは単にdoesnの」あなた自身のフォルダ構造を知っていて、相対パスでファイルにアクセスしている限り、あなたのアプリケーションフォルダがどこにあるか気にする必要はありません。今すぐ戻ってあなたの例に

相対化()あなたの視点から

<parent folder>/documents/Test/cat.html 

がために

/Users/somename/documents/Test/cat.html 

のと同じことになっていることを知りません。 relativize()は次のようになります

/root/Users/somename/documents/Test/cat.html 
/root/documents/Test/cat.html 

ので、上位cat.htmlから始まるあなたは

1)cat.html = ../

2)試験= ../../

3)文書を行きます= ../../../

4)somenameの= ../../../../

5)ユーザー= ../../../../。 ./

今、あなたは2番目の道をたどって梯子を降りる。

ので、出力

../../../../../documents/Test/cat.html

の相対化()の時点から完全に正しいですビュー。

この説明は、relativize()関数の機能を理解するのに役立ちましたか?

+0

この説明はまさに私が探していたものでした。私は完全に理解しています、ありがとう。 – Helenesh

+0

ようこそ。 :-) – DiabolicWords

関連する問題