2012-07-20 8 views
20

Ich lade eine ePub-Datei von einer URL.Pars Dateiname von URL vor dem Download der Datei

Jetzt möchte ich einen Mechanismus implementieren, durch den, wenn Benutzer versucht, die gleiche Datei erneut zu downloaden, sollte er Warnung/Fehlermeldung erhalten und diese Datei sollte nicht erneut heruntergeladen werden.

Um dies zu implementieren, muss ich den Namen der Datei in meiner Bibliothek mit dem Namen der Datei überprüfen, die Benutzer versucht, zu downloaden.

Aber ich habe nur this download link, und nicht den Dateinamen.

Wie erhält man den Namen der Datei vor dem Download, um sie mit der vorhandenen Datei zu vergleichen?

Antwort

46

In Android können Sie the guessFileName() method verwenden:

URLUtil.guessFileName(url, null, null) 

Alternativ kann eine vereinfachende Lösung in Java könnte sein:

String fileName = url.substring(url.lastIndexOf('/') + 1); 

(URL Unter der Annahme ist im Format: http://xxxxxxxxxxxxx/filename.ext)

+0

nehme ich einen Link haben, die Sammlung der Bücher enthält (z. B. 'www.bookstore.com'), von dem ich ein Buch auswählen (mit URL' www.bookstore. com/book1.epub'), die in meine Bibliothek heruntergeladen werden sollen. ** Wie bekomme ich die URL eines bestimmten Buchs ** d. H. 'Www.bookstore.com/book1.epub' ??? 'webView.getUrl()' wird mit Ausnahme des ersten Ladens überhaupt nicht ausgelöst. – GAMA

+2

Ihre Lösung funktioniert nur, wenn weder Parameter (? Param = Wert) noch Anker (#anchor) vorhanden sind. –

2

Sie müssen nicht wirklich Dateinamen vergleichen. Machen Sie einfach Datei Objekt für die Datei mit absoluten Pfad und überprüfen Sie, ob die Datei existiert.

protected boolean need2Download(String fileName) { 

    File basePath = new File(BOOK_STORE_PATH); 

    File fullPath = new File(basePath, fileName); 

    if (fullPath.exists()) 
     return false; 
    return true; 
} 

protected void downloadFile(String url) { 
    String fileName = url.substring(url.lastIndexOf('/') + 1); 

    if (need2Download(fileName)) { 
     // download 
    } 
} 
4

Keep it simple:

/** 
* This function will take an URL as input and return the file name. 
* <p>Examples :</p> 
* <ul> 
* <li>http://example.com/a/b/c/test.txt -> test.txt</li> 
* <li>http://example.com/ -> an empty string </li> 
* <li>http://example.com/test.txt?param=value -> test.txt</li> 
* <li>http://example.com/test.txt#anchor -> test.txt</li> 
* </ul> 
* 
* @param url The input URL 
* @return The URL file name 
*/ 
public static String getFileNameFromUrl(URL url) { 

    String urlString = url.getFile(); 

    return urlString.substring(urlString.lastIndexOf('/') + 1).split("\\?")[0].split("#")[0]; 
} 
1

Ich denke URL # getPath mit() sollte die Dinge vereinfachen.

public static String getFileNameFromUrl(URL url) { 

    String urlPath = url.getPath(); 

    return urlPath.substring(urlPath.lastIndexOf('/') + 1); 
} 

See, http://developer.android.com/reference/java/net/URL.html#getPath()

+0

Ich benutze es aber nicht, weil Dinge zu vereinfachen, mit GetPath() können Sie URL, die Abfrageparameter wie httt: //domain.com/file.ext haben? A = 1 # Anker als @TimAutin tun aber für mich lesbarer. – Davide

Verwandte Themen