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

Getting file extension from http url using Java

现在我知道 FilenameUtils.getExtension() 来自 apache。

但在我的例子中,我正在处理来自 http(s) url 的扩展,所以以防万一我有类似的东西

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

这个方法会returnsvg?position=5

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

如果您想要 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(".*/[^.]+\.([^?]+)\??.*", "");
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

您可以使用 JAVA 中的 URL 库。它在这种情况下有很多用处。你应该这样做:

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

然后,"fileIneed" 变量有很多 getter 方法。在您的情况下,"getPath()" 将检索此:

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

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

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

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