2013-01-14 22 views
7

, aşağıda işlevini kullanarak dosya URL'den dosya Uzantısı almak istedim:Android: MimeTypeMap.getFileExtensionFromUrl() kullanmalı mıyım? [Hatalar] Örneğin

Dosya ismi:

String url = "/mnt/sdcard/mydev/Greatest Hits - Lenny Kravitz (Booklet 01) [2000].jpg"; 

: Dosyanın

Greatest Hits - Lenny Kravitz (Booklet 01) [2000].jpg 

URL İşlev çağrısı:

String extension = MimeTypeMap.getFileExtensionFromUrl(url); 

Ancak işlev konusunda bir istisna alıyorum n arama. Bu bir hata veya özellik mi?

Çok sayıda yabancı karakter içermeyen (parantez gibi) dosya adları için iyi çalışır.

İşlev buggy mi? Bir şey mi eksik? Bir hatayı bir özellikten nasıl ayırt edeceğim? İşlev açıklamasını okudum ve düzgün çalışması gerekiyor.

Kişisel olarak projelerinizde kullanıyor musunuz? reliable görünmüyor.

cevap

18

Kodunuzu test ettiğimde, benim için bir istisna atılmıyor. Doğru dosya uzantısı "jpg" döndürülmese de. MimeTypeMap'u kullanarak tavsiye etmem. MimeTypeMap.getFileExtensionFromUrl(url) başarısız Neden olarak

String file = "/mnt/sdcard/mydev/Greatest Hits - Lenny Kravitz (Booklet 01) [2000].jpg"; 
String exten = ""; 

int i = file.lastIndexOf('.'); 
if (i > 0) { 
    exten = file.substring(i+1); 
} 

şu şekildedir: yerine dosya uzantısı elde etmek kolay bir yoldur? Sizin için uygun olmayan bir şekilde oluşturulmuş bir URL Dizgesi bekleniyor. Önce URLEncoder'u kullanarak kodlamalısınız. Örneğin:

String url = "/mnt/sdcard/mydev/Greatest Hits - Lenny Kravitz (Booklet 01) [2000].jpg"; 
url = URLEncoder.encode(url, "UTF-8"); 

Bu izin vermelidir MimeTypeMap.getFileExtensionFromUrl(url) düzgün çalışır ancak ne yazık ki hala yok etmek. Niye ya? URLEncoder, tüm boşlukları bir '+' işareti olarak değiştirir ve getFileExtensionFromUrl geçersiz bir karakter olduğunu düşünür. Bu bölüm, IMHO, bir hatadır.

Deneyimlerimden çoğu insan bu yöntemi kullanmıyor. Aslında, bu soruyu yayınlayana kadar hiç duymadım. Muhtemelen bir dosya uzantısı bulmak oldukça önemsiz ve çoğu insan yukarıda yazdıklarıma benzer bir kod yazıyor.

0

Projemde bu kullanmak ve dosya adında orada belirli karakterler,

Ben dize kendimi bölme rotasını gitmez karar sürece çalışır.

Ben soruna yönelik bir çalışmayı etrafında yapılan:

String ext = MimeTypeMap.getFileExtensionFromUrl(sanitizeFileName(Uri.encode(name))); 

Ve dosya adları sterilize etmek için bu yöntemi yapmıştır:

public static String sanitizeFileName(String name) 
{ 
    byte[] invalidChars = new byte[]{34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47}; 
    for(byte i : invalidChars) 
    { 
     name = name.replace((char)i,'_'); 
    } 
    return name; 
} 

sterilize yöntemi de başka şeyler için yararlıdır.

2
private String getMimeTypeFromPath(String path) { 
    String extension = path; 
    int lastDot = extension.lastIndexOf('.'); 
    if (lastDot != -1) { 
     extension = extension.substring(lastDot + 1); 
    } 
    // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185). 
    extension = extension.toLowerCase(Locale.getDefault()); 
    if (extension.equals("3ga")) { 
     return "audio/3gpp"; 
    } else if (extension.equals("js")) { 
     // Missing from the map :(. 
     return "text/javascript"; 
    } 
    return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
} 
İlgili konular