如何通过Java从下载链接获取文件扩展名?

如何通过Java从下载链接获取文件扩展名?,java,httpurlconnection,file-extension,Java,Httpurlconnection,File Extension,我想从他们的下载链接中获取一些文件的扩展名 下载链接不包含其文件的扩展名。例如,链接如下所示: http://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNfNYI4FFesWV5zeSPtcfpyHzKZI7dHjkluwtIYNkXOGmjh43Ktdn0VeBWhQ-9l2kheOPt5N2TM3yPEW4tTrtFFqniatwxxhbqsc78IU2pBaqWwy

我想从他们的下载链接中获取一些文件的扩展名

下载链接不包含其文件的扩展名。例如,链接如下所示:

http://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNfNYI4FFesWV5zeSPtcfpyHzKZI7dHjkluwtIYNkXOGmjh43Ktdn0VeBWhQ-9l2kheOPt5N2TM3yPEW4tTrtFFqniatwxxhbqsc78IU2pBaqWwyEVLeQx64zSda2CNGmUpSxyte_tamVoIk3y4zXisQ-vjmMp6n1BAB3nbUVlwWg/
我尝试使用
myHttpUrlConnection.getContentType()
获取文件扩展名,但结果不是我想要的结果

一些下载链接返回一个短语,如
“text/plain”
“application octet stream”
多部分/表单数据
。但是我只想要正确清晰的类型,比如
rar
mp4
txt
jpeg
mkv
zip
png
apk
mp3

你不能那样做。方法simpy:

返回内容类型标题字段的值

在大多数情况下(尽管没有保证)与文件扩展名/文件类型相关,例如
application/pdf
意味着该URL下有一个pdf文件

您列出的每个扩展名文件类型(rar、mp4、txt、jpeg、mkv、zip、png、apk、mp3)都有另一种结构。为了可靠地完成您想做的事情,您必须首先下载整个文件,然后根据内容检查其类型


您可以使用的一个很好的库示例是。

谢谢@syntagma。我可以下载几个字节(例如5个字节)的文件,然后检查它的类型吗?或者我必须下载整个文件?在某些情况下,您可以根据N个前字节检测文件类型,例如,请参阅Tika的
MagicDetector
:(通过查找特殊(“magic”)在文件开头附近的字节模式中,通常可以检测文件的类型。对于某些文件类型,这是一个简单的过程。对于其他文件类型,通常是基于容器的格式,魔法检测可能不够。(下面关于检测容器格式的详细信息))@Hadi,这取决于文件类型,有些文件有用来识别它们的标题(.class文件和.png文件),但即使有了这些标题,也可能只是碰巧有特定位模式的不同数据