如何从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 我如何获得文件扩展名。 ``

原文由 Ankur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 670
2 个回答

首先,我想确保你知道不可能找出 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("."));

上面的代码示例将从 --- 变量中的 URI 输出 .png 扩展名,注意 . extension 变量,如果包含在(句号)中你想收集没有前缀句点的文件扩展名,将子字符串索引增加一个,如下所示:

 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。
  • 修剪扩展名以删除不需要的空格。

我不会在这里介绍这两个功能的解决方案,因为这不是首先要问的问题。

希望这可以帮助!

原文由 Tim Visée 发布,翻译遵循 CC BY-SA 3.0 许可协议

此链接可能对仍有问题的人有所帮助: How I can get the mime type of a file having its Uri?

  public static String getMimeType(Context context, Uri uri) {
    String extension;

    //Check uri format to avoid null
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
        //If scheme is a content
        final MimeTypeMap mime = MimeTypeMap.getSingleton();
        extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
    } else {
        //If scheme is a File
        //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
        extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());

    }

    return extension;
}

原文由 Aaron 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题