Почему класс java-URL не распознает определенные протоколы?

URL u = новый URL ( "telnet://route-server.exodus.net" );

Эта строка генерирует:

java.net.MalformedURLException: неизвестный протокол: telnet

И я сталкиваюсь с аналогичными проблемами с другими URL-адресами, которые начинаются с "news://"

Это URL-адреса, извлеченные из ODP, поэтому я не понимаю, почему такие исключения возникают.

Ответы

Ответ 1

Вопрос

Java выбрасывает MalformedURLException, потому что не может найти URLStreamHandler для этого протокола. Проверьте подробности javadocs конструкторов.

Резюме:

Поскольку класс URL имеет метод openConnection, класс URL проверяет, чтобы Java знал, как открыть соединение с правильным протоколом. Без URLStreamHandler для этого протокола Java отказывается создавать URL, чтобы спасти вас от сбоя при попытке вызвать openConnection.

Решение

Вероятно, вы должны использовать класс URI, если вы не планируете открывать соединение этих протоколов в Java.

Ответ 2

Похоже, что в вашем приложении нет зарегистрированного обработчика протокола telnet. Поскольку класс URL можно использовать для открытия InputStream для URL-адреса, ему необходимо иметь зарегистрированного обработчика протокола для выполнения этой работы, если вам разрешено создавать объект, используя его.

Подробнее о том, как добавить обработчики, см. ниже: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

Ответ 4

Простой ответ заключается в том, что он распознает только определенные протоколы, а оставшаяся часть бесконечности протоколов не распознается.