apache 里commons包里的 ftp使用

来源:互联网 发布:ajax中解析json 编辑:程序博客网 时间:2024/03/29 20:44

由于最近重构别人的代码,发现了在使用ftp存在的问题,特记录如下:

 

FTP类来源:org.apache.commons.net.ftp.FTP

 

一般的同学都会写链接上ftp,由于是远程调用,程序要注意消息机制的处理。(链接失败怎么办)

 

重要问题在上传下载。

 

上传文件,基本上没问题

 

如果是文件夹呢?文件夹下又有文件夹。。。。

 

很多人会想到递归。对,就是递归。

 

但是,涉及到目录问题。往往会造成 文件和目录不对应的情况。

经过多番查找文档资料和自己亲自测试,终于弄明白了 changeWorkingDirectory(str);这个方法参数的含义。

 

eg: 目录A/B/C/D

 

首先,默认的的目录在ftp根目录下假设为 /home/ftp

 

如果,我要进到D目录,如何设置?

 

changeWorkingDirectory(A/B/C/D) ;即可

 

在此基础上,要回到B目录,该如何?

是否changeWorkingDirectory(A/B);?肯定错误!

 

应该 使用 changeToParentDirtory(),2次调用退到B目录下。

 

假如我在A目录下,进入C目录,是否能这么写

 

changeWorkingDirectory(A/B/C)?错误。

 

在A目录下,就不要再在路径中包含A了。应该直接changeWorkingDirectory(B/C);

 

 

总结如下:1、前进就用changeWorkingDirectory(str),这个str只能是该目录的下级目录,注意,下级目录中若有不存在,也会返回false

               2、后退就要用changeToParentDirectory()。顾名思义,从当前目录退到上级目录。

 

 

该总结是经过了鄙人多天的查资料,多次反复测试得出来的。API文档是没有写这么详细的。

 

 

当然还有个解决方案也可以说下:

 

在客户端将要上传的文件夹压缩,然后通过ftp传至服务器端。服务器端写一个监听线程,只要有相应的压缩包过来,就立刻解压。

压缩名最好开始不要定成zip格式,例如: example.tmp  。等要解压的时候,改名,并解压。