如何从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("."));
上面的代码示例将.png
在extension
变量中输出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。
- 修剪扩展名以删除不需要的空格。
我不会在这里介绍这两个功能的解决方案,因为这并不是一开始就要求的。
希望这可以帮助!