2017-05-01 72 views
1

早上好, 我試圖在Java中找到一種方法來找出符號鏈接指向的文件路徑。 我們有一個監視符號鏈接文件夾的系統,根據文件名做一些東西,刪除那個符號鏈接文件。 我需要做的是找出每個符號鏈接文件指向的位置,以便在符號鏈接時刪除該文件。 這是使用的Java 這是在一個RHEL系統上。JAVA如何找到符號鏈接指向的目標文件路徑?

任何API主題的指導將不勝感激。我在搜索中遇到了一堵牆。

回答

3

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#toRealPath-java.nio.file.LinkOption...-

路徑toRealPath(LinkOption ...選項) throws IOException返回現有文件的真實路徑。此方法的精確定義與實現有關,但通常它來自此路徑,它是一個絕對路徑,該路徑與此路徑相同的文件位於 ,但名稱元素表示目錄和文件的實際名稱。例如,其中 文件系統上的文件名比較不區分大小寫,那麼名稱元素將表示實際情況下的名稱。此外, 生成的路徑中刪除了多餘的名稱元素。

如果此路徑相對,則首先獲取其絕對路徑,如果通過調用toAbsolutePath方法,則爲 。

選項數組可用於指示如何處理符號鏈接 。默認情況下,符號鏈接將解析爲其最終的目標 。如果選項NOFOLLOW_LINKS存在,則此方法確實不會解析符號鏈接 。某些實現允許使用特殊名稱 (如「..」來引用父目錄。當得到真實的路徑,並且「..」(或等價物)之前是非「..」名稱時,則實施通常會導致兩個名稱都被刪除。當 未解析符號鏈接並且前面的名稱是符號鏈接 則只有在確保生成的 路徑將找到與此路徑相同的文件時,纔會刪除名稱。

參數:選項 - 選項指示如何符號鏈接是 處理返回:絕對路徑表示位於此對象的文件 的真實路徑拋出:IOException - 如果文件不 存在或I/O錯誤發生拋出:SecurityException - 在 默認提供的情況,以及安全管理器被安裝,其checkRead 方法被調用,以檢查讀取訪問該文件,並在此 路徑是不是絕對的,它的checkPropertyAccess方法調用 檢查訪問系統屬性user.dir

使用nio的toRealPath()方法。 NO_FOLLOW_LINKS LinkOption與你所要做的相反,所以不要使用它。

Path realPath = aFile.toPath().toRealPath() 

Path realPath = aPath().toRealPath() 

有一個問題與此,是,不像toAbsolutePathtoRealPath拋出IOException,因爲它實際上有與文件系統進行交互,以找到真正的路徑。

+0

很棒的細節和鏈接到API,另外請注意,SecurityException異常也可以拋出。這正是我需要的信息。感謝您的幫助@Novaterata – Elijah

+0

正確,但IOException被選中,因此您將不得不修改您的界面或使用try/catch – Novaterata

2

java.nio.file.Files.readSymbolicLink可能是你需要的。

+0

謝謝您的導入路徑。 – Elijah

+0

要注意它會返回一個相對路徑,比如'/ usr/local/file',說'/ usr/local/link - >。/ file'。然後Files.readSymbolicLink返回'file'和'Paths.get(「/ usr/local/files」)。equals(Files.readSymbolicLink(Paths.get(「/ usr/local/link」)))'爲false。在這種情況下,我使用了'Files.isSameFile(文件,鏈接)'。並獲得鏈接的目標文件的絕對路徑'link.toRealPath()' – juanmf

相關問題