Получение расширения файла из http URL с использованием Java

Теперь я знаю о FilenameUtils.getExtension() из апача.

Но в моем случае я обрабатываю расширения из URL-адресов http(s), поэтому в случае, если у меня есть что-то вроде

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

этот метод вернется svg?position=5

Есть ли лучший способ справиться с этой ситуацией? Я имею в виду без написания этой логики сам.

2 ответа

Вы можете использовать библиотеку URL от JAVA. Это имеет много полезности в этом случае. Вы должны сделать что-то вроде этого:

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"

Документация по библиотеке URL JAVA >>> https://docs.oracle.com/javase/7/docs/api/java/net/URL.html

Если вам нужно решение 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
Другие вопросы по тегам