2011-09-02 65 views
8

我正在掃描從「/」開始的所有目錄,以找到像「MYFOLDER」這樣的特定目錄。但是,該文件夾是我得到同一文件夾的雙重實例。這是因爲一個文件夾位於「/ mnt/sdcard/MYFOLDER」中,同一個文件夾在「/ sdcard/MYFOLDER」中有一個符號鏈接。文件夾是不是符號鏈接?「。請給我一些建議..android:確定一個符號鏈接

+0

,你能告訴我們的代碼? –

+0

你可以在這裏檢查:http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links。它可能會幫助你! –

+0

先生,沒有什麼具體的代碼..我有一個非常簡單的問題。您使用listFiles()函數掃描目錄。但是,有兩個同名的目錄,即/ mnt/scard和/ sdcard。一個是與另一個的象徵聯繫。我只是想知道是否有任何區分這兩種方式..有什麼辦法知道該文件夾是一個符號鏈接..非常感謝你 – Farhan

回答

13

這基本上是他們Apache Commons怎麼辦(受their license):

public static boolean isSymlink(File file) throws IOException { 
    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()); 
} 

編輯感謝@LarsH評論。 以上代碼僅檢查子文件是否符號鏈接。

爲了回答這個問題,OP,那就更簡單了:

public static boolean containsSymlink(File file) { 
    return file.getCanonicalFile().equals(file.getAbsoluteFile()); 
} 
+0

一個有用的答案,+1。任何想法爲什麼他們檢查父文件,並使用父母的getCanonicalFile(),而不是總是隻使用canon = file?它是否與「如果一個路徑元素不存在(或不可搜索),解釋規範化作爲文本操作之間存在衝突(其中」a /../ b「是」b「,即使」a 「 不存在) 。」? – LarsH

+1

哦,我明白了......這是爲了確定文件路徑中的* last component *是否是符號鏈接...而不是文件路徑中的任何組件是否是符號鏈接。我認爲在OP的情況下,我們會希望後者,在這種情況下,我們會放棄此函數的'else'子句。 – LarsH

+1

@LarsH好點!我編輯了答案。 – rds