2011-09-02 54 views
8

Tôi đang quét tất cả các thư mục bắt đầu từ "/" để tìm một số thư mục cụ thể như "MYFOLDER". Tuy nhiên, thư mục là tôi nhận được các cá thể kép của cùng một thư mục. Điều này xảy ra vì một thư mục nằm trong "/ mnt/sdcard/MYFOLDER" và cùng một thư mục có liên kết tượng trưng trong "/ sdcard/MYFOLDER" ..android: xác định liên kết tượng trưng

Câu hỏi của tôi là, "Có cách nào để xác định xem thư mục là một liên kết tượng trưng hay không? ". Xin vui lòng cho tôi một số lời đề nghị ..

+0

bạn có thể cho chúng ta thấy mã? –

+0

Bạn có thể kiểm tra tại đây: http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links. Nó có thể giúp bạn! –

+0

Thưa ông, không có gì cụ thể về mã .. Tôi có một câu hỏi rất đơn giản. bạn quét các thư mục bằng cách sử dụng hàm listFiles(). Tuy nhiên, có hai thư mục có cùng tên là i.e.,/mnt/scard và/sdcard. Một là liên kết tượng trưng cho người khác. Tôi chỉ muốn biết nếu có bất kỳ cách nào để phân biệt giữa hai .. Có cách nào để biết rằng thư mục là một liên kết tượng trưng .. Cảm ơn bạn rất nhiều – Farhan

Trả lời

13

Đây thực chất là cách họ làm trong Apache Commons (tùy thuộc vào 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()); 
} 

Sửa nhờ bình luận @LarsH. Đoạn mã trên chỉ kiểm tra xem tập tin trẻ em có phải là một liên kết tượng trưng hay không.

Để trả lời câu hỏi OP, nó thậm chí còn dễ dàng hơn:

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

Câu trả lời hữu ích, +1. Bất kỳ ý tưởng tại sao họ kiểm tra một tệp cha và sử dụng getCanonicalFile() của cha mẹ thay vì luôn sử dụng tệp canon =? Liệu nó có liên quan đến "Nếu một phần tử đường dẫn không tồn tại (hoặc không thể tìm kiếm được), có một xung đột giữa diễn dịch chuẩn hóa như một thao tác văn bản (" a /../ b "là" b "ngay cả khi" a " không tồn tại) ."? – LarsH

+1

Ồ, tôi hiểu rồi ... đây là để xác định xem thành phần * cuối cùng trong đường dẫn 'tập tin' có phải là một liên kết tượng trưng ... không cho dù thành phần * nào trong đường dẫn của tệp là một liên kết tượng trưng. Tôi nghĩ trong trường hợp của OP, chúng ta sẽ muốn cái sau, trong trường hợp này chúng ta sẽ bỏ mệnh đề 'else' của hàm này. – LarsH

+1

@LarsH Điểm tốt! Tôi đã chỉnh sửa câu trả lời. – rds

Các vấn đề liên quan