2011-09-02 18 views
8

Sto analizzando tutte le directory a partire da "/" per trovare alcune directory particolari come "MYFOLDER". Tuttavia, la cartella è che ottengo doppie istanze della stessa cartella. Ciò si verifica perché una cartella si trova in "/ mnt/sdcard/MYFOLDER" e la stessa cartella ha un collegamento simbolico in "/ sdcard/MYFOLDER" ..android: determinazione di un collegamento simbolico

La mia domanda è, "C'è un modo per determinare se il la cartella è un collegamento simbolico o no? ". Si prega di darmi qualche suggerimento ..

+0

può noi il codice che mostrare? –

+0

Puoi controllare qui: http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links. Potrebbe aiutarti! –

+0

Signore, non c'è nulla di specifico nel codice. Ho una domanda molto semplice. si scansionano le directory usando la funzione listFiles(). Tuttavia, ci sono due directory con lo stesso nome, ad es.,/Mnt/scard e/sdcard. Uno è il collegamento simbolico all'altro. Voglio solo sapere se c'è qualche modo di distinguere tra questi due .. C'è un modo per sapere che la cartella è un collegamento simbolico .. Grazie mille – Farhan

risposta

13

Questo è essenzialmente come lo fanno a Apache Commons (soggetto a 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()); 
} 

Modifica grazie al commento @LarsH. Il codice sopra riportato controlla solo se il file secondario è un collegamento simbolico.

Al fine di rispondere alla domanda OP, è ancora più facile:

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

Una risposta utile, +1. Qualche idea sul perché controllano un file genitore e usano getCanonicalFile() del genitore invece di usare sempre canon = file? Ha a che fare con "Se un elemento path non esiste (o non è ricercabile), c'è un conflitto tra l'interpretazione della canonicalizzazione come un'operazione testuale (dove" a /../ b "è" b "anche se" a " non esiste) ."? – LarsH

+1

Oh, ho capito ... questo è per determinare solo se l'ultimo componente * nel percorso di 'file' è un collegamento simbolico ... non se * qualsiasi componente * nel percorso del file sia un collegamento simbolico. Penso che nel caso dell'OP, vorremmo quest'ultimo, nel qual caso abbandoneremmo la clausola 'else' di questa funzione. – LarsH

+1

@LarsH Buon punto! Ho modificato la risposta. – rds

Problemi correlati