2011-12-13 333 views
3

我试图从服务器中使用FTP协议在java中下载文件。 通过使用以下URL,我可以连接到服务器&下载文件。使用ftp协议连接到服务器,其密码包含“@”符号

URL url = new URL("ftp://"+user+":"+password+"@"+host+"/"+remoteFile+";type=i"); 

但是,当我的密码包含 “@”(例如:软@ 2011)符号,它抛出以下异常:

java.net.UnknownHostException: [email protected] 

这是不能够区分两个 “@” 符号。

我该如何避免这个问题?我可以使用任何转义字符来避免这个问题吗?

+0

如果你写'user:passwor \ @ d'不工作? – Alex

回答

5

URI encoding密码(最好是用户名)也应该正常工作。

URL url = new URL("ftp://" + 
        URLEncoder.encode(user, "UTF-8") + ":" + 
        URLEncoder.encode(password, "UTF-8") + "@" + 
        host + "/" + remoteFile + ";type=i"); 
+0

非常感谢Gustafc。它工作正常。 – sankar

+0

URLEncoder.encode已弃用。 – mateuszb

+0

@mateuszb'encode(String)'已弃用,但'encode(String,String)'不是 – gustafc

1

尝试使用URI来代替:

final URI ftpURI = new URI("ftp", "[email protected]", host, 22, remoteFile, null, null); 

然后使用:

ftpURI.toURL() 

这通常应该给你的期望是什么。

+0

谢谢kristen – sankar