2011-12-13 334 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