2011-09-02 9 views
8

"MYFOLDER" gibi belirli dizinleri bulmak için "/" ile başlayan tüm dizinleri taraıyorum. Ancak, klasör aynı klasörün çift örneklerini almamdır. Bu, bir klasörün "/ mnt/sdcard/MYFOLDER" içinde bulunduğu ve aynı klasörün "/ sdcard/MYFOLDER" içindeki sembolik bir bağa sahip olduğu için oluşur.android: sembolik bir bağlantı belirleme

Benim sorum şu ki, "Bunu belirlemek için herhangi bir yol var mı klasör sembolik bir bağlantı mı değil mi? " Bana bazı öneriler verin ..

+0

bize kod gösterebilir? –

+0

Buradan kontrol edebilirsiniz: http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links. Bu size yardımcı olabilir! –

+0

Efendim, kod hakkında özel bir şey yok .. Çok basit bir sorum var. listFiles() işlevini kullanarak dizinleri tarayın. Ancak, aynı ada sahip iki dizin vardır:/mnt/scard ve/sdcard. Biri diğerine sembolik bağlantıdır. Ben sadece bu ikisi arasında ayrım herhangi bir yolu olup olmadığını bilmek istiyorum .. Bu klasörün sembolik bir bağlantı olduğunu bilmek için herhangi bir yolu var .. Çok teşekkür ederim – Farhan

cevap

13

onlar (their license tabi) Apache Commons yapmak nasıl Bu temelde geçerli: @LarsH yorumuna

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()); 
} 

Düzenleme sayesinde. Yukarıdaki kod, yalnızca çocukların dosyalarının bir simetrik olup olmadığını kontrol eder. OP soruya cevap vermek amacıyla

, bu da kolay:

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

Yardımcı bir cevap, +1. Bir ana dosya için neden kontrol ettikleri ve her zaman yalnızca canon = file yerine ebeveynin getCanonicalFile() işlevini kullandıklarıyla ilgili herhangi bir fikir var mı? “Bir yol unsuru yoksa (veya aranabilir değilse), bir metinsel işlem olarak yorumlama kanonikleştirmesi arasında bir çelişki vardır (burada" a /../ b "," b "ise bile" " bulunmuyor) ."? – LarsH

+1

Oh, anladım ... bu sadece 'file' yolundaki * son bile *enin * sembolik bir link olup olmadığını belirlemektir… dosya yolundaki herhangi bir * elemanın sembolik bir bağlantı olup olmadığı değil. Bence OP'nin durumunda, ikincisini isteriz, bu durumda bu işlevin "else" maddesini bırakırdık. – LarsH

+1

@LarsH İyi nokta! Cevabı ben düzenledim. – rds