使用Java从http url获取文件扩展名

时间:2019-03-01 13:26:27

标签: java file-extension fileutils

现在我从apache了解FilenameUtils.getExtension()

但是对于我来说,我正在处理来自http(s)url的扩展名,所以如果我有类似的东西

https://your_url/logo.svg?position=5

此方法将返回svg?position=5

有没有最好的方法来处理这种情况?我的意思是不用我自己写这种逻辑。

2 个答案:

答案 0 :(得分:1)

您可以使用JAVA中的URL库。在这种情况下,它具有很大的实用性。您应该执行以下操作:

String url = "https://your_url/logo.svg?position=5";
URL fileIneed = new URL(url);

然后,您有很多用于“ fileIneed”变量的吸气剂方法。在您的情况下,“ getPath()”将检索以下内容:

fileIneed.getPath() ---> "/logo.svg"

然后使用您正在使用的Apache库,您将获得“ svg”字符串。

FilenameUtils.getExtension(fileIneed.getPath()) ---> "svg"
  

JAVA URL库文档>>>   https://docs.oracle.com/javase/7/docs/api/java/net/URL.html

答案 1 :(得分:0)

如果要使用brandname®解决方案,请在剥离查询字符串(如果存在)之后考虑使用Apache方法:

String url = "https://your_url/logo.svg?position=5";
url = url.replaceAll("\\?.*$", "");
String ext = FilenameUtils.getExtension(url);
System.out.println(ext);

如果您想要甚至不需要外部库的单线,请考虑使用String#replaceAll

String url = "https://your_url/logo.svg?position=5";
String ext = url.replaceAll(".*/[^.]+\\.([^?]+)\\??.*", "$1");
System.out.println(ext);

svg

以下是上面使用的正则表达式模式的说明:

.*/     match everything up to, and including, the LAST path separator
[^.]+   then match any number of non dots, i.e. match the filename
\.      match a dot
([^?]+) match AND capture any non ? character, which is the extension
\??.*    match an optional ? followed by the rest of the query string, if present