在下载文件之前,从URLparsing文件名

我正在从URL下载ePub文件。

现在我想实现一个机制,如果用户试图重新下载相同的文件,他应该得到警告/错误消息,该文件不应该再次下载。

要实现这一点,我需要检查我的库中存在的文件的名称与正在尝试下载的文件的名称。

但我只有这个下载链接 ,而不是文件名。

如何在下载之前获取文件的名称,以便将其与现有文件进行比较?

Solutions Collecting From Web of "在下载文件之前,从URLparsing文件名"

在android中,你可以使用guessFileName()方法 :

URLUtil.guessFileName(url, null, null) 

另外,Java中一个简单的解决scheme可能是:

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

(假设您的url格式为: http://xxxxxxxxxxxxx/filename.ext

尝试使用URLUtil.guessFileName(url, null, null)作为例子。 我认为这是最好的Android方式。

更多信息在这里: https : //developer.android.com/reference/android/webkit/URLUtil.html#guessFileName(java.lang.String,java.lang.String,java.lang.String)

把事情简单化 :

 /** * 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]; } 

你真的不得不比较文件名。 只需使用绝对path为文件创buildFile对象,并检查文件是否存在。

 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 } } 

我认为使用URL#getPath()应该简化一些事情。

 public static String getFileNameFromUrl(URL url) { String urlPath = url.getPath(); return urlPath.substring(urlPath.lastIndexOf('/') + 1); } 

请参阅http://developer.android.com/reference/java/net/URL.html#getPath(&#xFF09;