首頁 > Java > java教程 > 比較 `getAbsolutePath()` 和 `getCanonicalPath()` 是否是確定 Java 1.6 中的目錄是否為符號連結的可靠方法?

比較 `getAbsolutePath()` 和 `getCanonicalPath()` 是否是確定 Java 1.6 中的目錄是否為符號連結的可靠方法?

Linda Hamilton
發布: 2024-10-29 14:07:29
原創
779 人瀏覽過

Is comparing `getAbsolutePath()` and `getCanonicalPath()` a reliable way to determine if a directory in Java 1.6 is a symbolic link?

在Java 1.6 中確定符號連結

在Unix 系統上運行的Java 程式中,區分實際目錄和符號連結至關重要。本題探討了一種使用特定條件來辨識目錄符號連結的方法。

問題:

在DirectoryWalker 類別的上下文中,是否可以使用以下方法準確地確定已知目錄實例是否表示符號連結:

<code class="java">if (file.getAbsolutePath().equals(file.getCanonicalPath())) {
    // real directory ---> do normal stuff      
}
else {
    // possible symbolic link ---> do link stuff
}</code>
登入後複製

答案:

雖然提供的方法是識別可能的符號連結的常用技術,由於以下原因,它不能被認為是可靠的:

  • 潛在的誤報:即使對於實際目錄(例如安裝的網路磁碟機),絕對路徑和規範路徑之間也可能會發生不匹配。
  • 平台依賴性:檔案路徑的行為在不同的作業系統和檔案系統中可能會有所不同。

而不是依賴絕對路徑和規範路徑檔案本身,建議使用父目錄的規範路徑。這種方法在識別符號連結方面更加準確。

以下是 Apache Commons 中實作此技術的範例:

<code class="java">public static boolean isSymlink(File file) throws IOException {
  if (file == null)
    throw new NullPointerException(&quot;File must not be null&quot;);
  File canon;
  if (file.getParent() == null) {
    canon = file;
  } else {
    File canonDir = file.getParentFile().getCanonicalFile();
    canon = new File(canonDir, file.getName());
  }
  return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
}</code>
登入後複製

以上是比較 `getAbsolutePath()` 和 `getCanonicalPath()` 是否是確定 Java 1.6 中的目錄是否為符號連結的可靠方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板