使用ftp协议连接到密码包含“@”符号的服务器

时间:2011-12-13 12:25:54

标签: java ftp

我正在尝试使用java中的FTP协议从服务器下载文件。 通过使用以下URL我能够连接到服务器&下载文件。

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

但是当我的密码包含“@”(例如:soft @ 2011)符号时,它会引发以下异常:

  java.net.UnknownHostException: 2010@192.168.1.100 

无法区分“@”符号。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

尝试使用URI:

final URI ftpURI = new URI("ftp", "user@pass", host, 22, remoteFile, null, null);

然后使用:

ftpURI.toURL()

这应该通常会给你预期的结果。