2009-07-21 49 views
5

我正在使用Java URL和URLConnection類將文件上載到使用FTP的服務器。除了簡單地上傳文件之外,我不需要做任何其他操作,所以我想避免使用任何外部庫,並且對使用不受支持的sun.net.ftp類保持警惕。任何方式來指定FTP URL中的絕對路徑?

有什麼辦法可以在FTP連接字符串中使用絕對路徑嗎?我想將我的文件放在類似「/ ftptransfers/...」的文件中,但FTP路徑與用戶主目錄相關。

樣品上傳代碼:

URL url = new URL("ftp://username:[email protected]/file.txt"); 
URLConnection uc = url.openConnection(); 
uc.setDoOutput(true); 
OutputStream out = uc.getOutputStream() ; 
out.write("THIS DATA WILL BE WRITTEN TO FILE".getBytes()); 
out.close(); 

回答

5

我居然發現有一個半標準的方式來做到這一點,對我的工作。

簡短的回答:用 「%2F」 替換斜線

龍答:每"A FTP URL Format"文件:

例如,URL 「ftp://[email protected]/%2Fetc/motd」 是由 FTP-解釋到「host.dom」,以「myname」登錄 (提示輸入密碼,如果需要),然後執行 「CWD/etc」,然後執行「RETR motd」。

這與 「ftp://[email protected]/etc/motd」具有不同的含義,其將「CWD等」,然後 「RETR motd」;可能會執行初始「CWD」,相對於「myname」的默認目錄 。

另一方面, 「ftp://[email protected]//etc/motd」,將「CWD」與空 參數,然後「CWD等」,然後「RETR motd」。

+0

儘管聽起來更像是利用標準程序,但我確實發現這是一個非常有用的解決方案!我不想使用任何外部庫,也不想直接使用sun.net.ftp。而apache commons FTPClient不支持代理(除了系統屬性),它是一個外部庫。感謝您的解決方案! – 2011-06-28 15:15:42

1

我認爲你最好的選擇是使用Apache Commons FTP組件,並做了「CD」你建立連接後。

如果您願意,您可以隨時編寫一個包裝器,以便可以用上述格式指定URL。

-ace

+0

儘管OP不想使用外部庫,但我認爲這是一個需要它的情況(除非他想自己實現cd命令,我猜他可以做) – 2009-07-22 03:09:41