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

时间:2010-03-09 03:49:50

标签: java url protocols malformedurlexception

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

此行正在生成:

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

我遇到与以“news://”

开头的其他网址类似的问题

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

4 个答案:

答案 0 :(得分:44)

<强>问题

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

要点:

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

<强>解决方案

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

您收到该错误,因为java没有telnet的标准protocol handler

答案 3 :(得分:3)

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