I'm downloading an ePub file from a URL.
Now I want to implement a mechanism by which if user tries to re-download the same file, he should get warning/error message and that file should not be downloaded again.
To implement this, I need to check the name of the file present in my library with the name of the file user is trying to download.
But I just have this download link, and not the file name.
How to get the name of the file before download in order to compare it with the existing file?
In android you can use the guessFileName() method:
URLUtil.guessFileName(url, null, null)
Alternatively, a simplistic solution in Java could be:
String fileName = url.substring(url.lastIndexOf('/') + 1);
(Assuming your url is in the format: http://xxxxxxxxxxxxx/filename.ext
)
UPDATE March 23, 2018
This question is getting lots of hits and someone commented my 'simple' solution does not work with certain urls so I felt the need to improve the answer.
In case you want to handle more complex url pattern, I provided a sample solution below. It gets pretty complex quite quickly and I'm pretty sure there are some odd cases my solution still can't handle but nevertheless here it goes:
public static String getFileNameFromURL(String url) { if (url == null) { return ""; } try { URL resource = new URL(url); String host = resource.getHost(); if (host.length() > 0 && url.endsWith(host)) { // handle ...example.com return ""; } } catch(MalformedURLException e) { return ""; } int startIndex = url.lastIndexOf('/') + 1; int length = url.length(); // find end index for ? int lastQMPos = url.lastIndexOf('?'); if (lastQMPos == -1) { lastQMPos = length; } // find end index for # int lastHashPos = url.lastIndexOf('#'); if (lastHashPos == -1) { lastHashPos = length; } // calculate the end index int endIndex = Math.min(lastQMPos, lastHashPos); return url.substring(startIndex, endIndex); }
This method can handle these type of input:
Input: "null" Output: "" Input: "" Output: "" Input: "file:///home/user/test.html" Output: "test.html" Input: "file:///home/user/test.html?id=902" Output: "test.html" Input: "file:///home/user/test.html#footer" Output: "test.html" Input: "http://example.com" Output: "" Input: "http://www.example.com" Output: "" Input: "http://www.example.txt" Output: "" Input: "http://example.com/" Output: "" Input: "http://example.com/a/b/c/test.html" Output: "test.html" Input: "http://example.com/a/b/c/test.html?param=value" Output: "test.html" Input: "http://example.com/a/b/c/test.html#anchor" Output: "test.html" Input: "http://example.com/a/b/c/test.html#anchor?param=value" Output: "test.html"
You can find the whole source code here: https://ideone.com/uFWxTL
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With