2009-07-21 131 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