如何从uri确定文件的文件扩展名


问题内容

假设给了我一个URI,并且我想找到返回的文件的文件扩展名,那么我必须在Java中做什么。

例如,位于http://www.daml.org/2001/08/baseball/baseball-
ont
的文件为http://www.daml.org/2001/08/baseball/baseball-
ont.owl

当我做

    URI uri = new URI(address); 
    URL url = uri.toURL();
    String file = url.getFile();
    System.out.println(file);

我无法看到带有.owl扩展名的完整文件名,/2001/08/baseball/baseball-ont以及如何获取文件扩展名。``


问题答案:

首先,我想确保您也知道无法找到URI链接的文件类型,因为以符号结尾的链接.jpg可能会让您访问.exe文件(由于符号链接和.htaccess,URL尤其如此)文件),因此,如果您要限制允许的文件类型,那么从URI
获取 真正的 扩展名并不是一个坚决的解决方案。因此,我假设您只是想知道文件基于URI的扩展名,即使它不是完全值得信赖的。

您可以使用以下方法从任何URI,URL或文件路径获取扩展名。您不必使用任何库或扩展,因为这是Java的基本功能。此解决方案获取.URI字符串中最后一个(句点)符号的位置,并创建一个从句点符号的位置开始,到URI字符串的结尾结束的子字符串。

String uri = "http://www.google.com/support/enterprise/static/gsa/docs/admin/70/gsa_doc_set/integrating_apps/images/google_logo.png";
String extension = uri.substring(uri.lastIndexOf("."));

上面的代码示例将.pngextension变量中输出URI
的扩展名,请注意.扩展名中包含一个(句点),如果要收集不带前缀句点的文件扩展名,则将子字符串索引增加一个,如下所示:

String extension = uri.substring(url.lastIndexOf(".") + 1);

在正则表达式上使用此方法的一个专家(其他人经常使用的方法)是,这样做的资源消耗少了很多,执行起来也很繁琐,同时给出了相同的结果。

此外,您可能要确保URL包含句点字符,请使用以下代码来实现:

String uri = "http://www.google.com/support/enterprise/static/gsa/docs/admin/70/gsa_doc_set/integrating_apps/images/google_logo.png";
if(uri.contains(".")) {
    String extension = uri.substring(url.lastIndexOf("."));
}

您可能想进一步改善功能,以创建一个更强大的系统。两个示例可能是:

  • 通过检查URI是否存在或通过使用正则表达式确保URI的语法有效来验证URI。
  • 修剪扩展名以删除不需要的空格。

我不会在这里介绍这两个功能的解决方案,因为这并不是一开始就要求的。

希望这可以帮助!