https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#toRealPath-java.nio.file.LinkOption...-
パスtoRealPath(LinkOption ...オプション) はにIOExceptionが既存のファイルの実際のパスを返します。このメソッドの正確な定義は実装に依存しますが、 一般に、このパスからは という絶対パスがこのパスと同じファイルを派生しますが、ディレクトリとファイルの実際の名前は となります。たとえば、ファイルシステム上の ファイル名の比較で大文字と小文字を区別しない場合、 という名前の要素は、実際の場合の名前を表します。さらに、 結果のパスには冗長な名前要素が削除されています。
このパスが相対パスである場合は、toAbsolutePathメソッドを呼び出すことによって、絶対パスが最初に取得されます( )。
オプション配列を使用して、シンボリックリンクの処理方法を にすることができます。デフォルトでは、シンボリックリンクは最終ターゲットの に解決されます。オプションNOFOLLOW_LINKSが存在する場合、このメソッドは シンボリックリンクを解決しません。いくつかの実装では、 ".."のような特別な名前 は、親ディレクトリを参照することができます。実際の パスを派生し、 ".."(または同等のもの)の前に非 ".."という名前がある場合、実装では一般的に両方の名前が削除されます。 がシンボリックリンクを解決しておらず、その前の名前がシンボリックリンクである場合 その結果、このパスと同じファイルが見つかる パスが保証される場合にのみ、名前が削除されます。
パラメータ: - オプション 扱わリターンはどのようにシンボリックリンクを示すオプション:絶対パスは、このオブジェクトによって配置されたファイル の実際のパスを表す例外:IOException - ファイルがない場合 が存在しないか、I/Oエラーではありませんが発生した場合SecurityException - デフォルトプロバイダの場合に、セキュリティマネージャがインストールされている場合、checkRead メソッドが呼び出されてファイルへの読み取りアクセスがチェックされ、この パスが絶対でない場合、checkPropertyAccessメソッドが呼び出されて checkシステムプロパティuser.dirへのアクセス
nioのtoRealPath()メソッドを使用します。 NO_FOLLOW_LINKS LinkOptionは、あなたがやろうとしていることの反対を行いますので、使用しないでください。これで
Path realPath = aFile.toPath().toRealPath()
Path realPath = aPath().toRealPath()
一つの落とし穴、それは実際に実際のパスを見つけるために、ファイルシステムと対話することがあるのでtoAbsolutePath
とは異なり、toRealPath
はIOException
を投げる、ということです。
素晴らしい詳細とAPIへのリンクですが、SecurityException例外もスローすることができます。これはまさに私が必要としていた情報でした。助けてくれてありがとう@Novaterata – Elijah
しかし、IOExceptionがチェックされているので、インターフェイスを変更するか、try/catchを使う必要があります。 – Novaterata