当前位置: 首页 > 面试题库 >

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

霍建柏
2023-03-14
问题内容

假设给了我一个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。
  • 修剪扩展名以删除不需要的空格。

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

希望这可以帮助!



 类似资料:
  • 我正在将文件上传到Amazon s3 bucket,并且可以访问InputStream和一个包含文件的MIME类型但不是原始文件名的字符串。在将文件推到S3之前,由我来实际创建文件名和扩展名。是否有库或方便的方法从MIME类型中确定要使用的适当扩展? 我已经看到了一些关于Apache Tika库的引用,但这似乎有些过头了,我还没有能够让它成功地检测到文件扩展名。从我所能收集到的信息来看,这段代码应

  • 问题内容: 我正在将文件上传到Amazon s3存储桶,并可以访问InputStream和一个包含文件的MIME类型而不是原始文件名的字符串。在将文件推送到S3之前,实际由我决定要创建文件名和扩展名。是否有一种库或便捷的方法来确定要从MIME类型使用的适当扩展名? 我已经看到了对Apache Tika库的一些引用,但是这似乎有点过头了,而且我还无法获得它来成功检测文件扩展名。从我已经收集到的内容来

  • 问题内容: 为了清楚起见,我不是在寻找MIME类型。 假设我有以下输入: 我想要一种分解此输入的方法,特别是扩展。有没有内置的方式可以做到这一点?我想避免编写自己的解析器。 问题答案: 在这种情况下,使用FilenameUtils.getExtension从Apache的百科全书IO 这是如何使用它的示例(你可以指定完整路径或仅指定文件名): Maven依赖项: Gradle Groovy DSL

  • 我目前正在尝试制作一个脚本,该脚本将grep输入以查看某些内容是否属于某种文件类型(例如zip),尽管文件类型之前的文本可以是任何内容,因此例如 都属于这一类。我正在尝试使用通配符grep这些,到目前为止,我已经尝试过了。 但是每当我这样做时,它都会发现文件很好,但是如果.zip之后有其他字符,它仍然会显示输出例如或仍然会被grep拾取。话虽如此,我应该怎么做才能防止 grep 在后显示具有其他字

  • 我有一个分享按钮,它将分享一个图片从文字的绘制。 多谢了。

  • 问题内容: 我正在某个程序上工作,根据文件的扩展名,我需要做不同的事情。我可以用这个吗? 问题答案: 假设是一个字符串,可以使用: 要不区分大小写,并消除可能很大的else-if链: