为什么java的URL类不能识别某些协议?

URL u =新URL(“telnet://route-server.exodus.net”);

这条线正在产生:

java.net.MalformedURLException:未知协议:telnet

我遇到与以“news://”开头的其他url类似的问题

这些是从ODP中提取的URL,所以我不明白为什么会出现这样的例外情况。

问题

Java抛出MalformedURLException因为它找不到该协议的URLStreamHandler 。 检查构造函数的javadocs以获取详细信息。

概要:

由于URL类具有openConnection方法,因此URL类会进行检查以确保Java知道如何打开正确协议的连接。 如果没有该协议的URLStreamHandler ,Java会在您尝试调用openConnection时拒绝创建URL以避免失败。

如果您不打算在Java中打开这些协议的连接,则应该使用URI类。

听起来你的应用程序中没有协议“telnet”的注册处理程序。 由于URL类可用于打开InputStream到URL,因此如果允许使用它创建对象,则需要为协议执行此注册处理程序。

有关如何添加处理程序的详细信息,请参阅: http : //docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

您收到该错误是因为java没有telnet的标准协议处理程序 。

简单的答案是它只能识别某些协议,并且无法识别无限协议的其余部分。