日期:2014-05-20  浏览次数:20589 次

关于java操作ftp的问题
小弟有个难题,
  现在有A、B两台ftp服务器和一台tomcat服务器,我需要写一个timer部署在tomcat服务器上,timer的作用是定期从A ftp服务器上拉取数据上传到B ftp服务器上。
  注:最好不通过tomcat做中转,因为文件较大。

  各位大拿有什么好的建议吗?

------解决方案--------------------
你直接在b的服务器上用ftp脚本做个定时任务不就完了么?这和tomcat服务器有什么关系?下面的是个参考,在windows的定时任务里添加定时运行a.bat

a.bat:
#@ECHO OFF
ftp -s:script.txt

script.txt:
open 10.*.*.1
username
passwd
cd /filepath/
bin
prompt
mget *
quit
------解决方案--------------------
如果你能在两台FTP服务器上,做个网络mount的话,似乎你的Java程序就只需要telnet到某服务器上执行个copy就完事了。

如果不能直接网络共享目录,那么建议你的Java程序仍然是先telnet到某服务器上,然后用该服务器执行ftp明道到另一台服务器上去下载。

如果你熟悉脚本的话,自己能写个batch.sh脚本,那么Java程序就更省事了。

总的来说就是,telnet + shell命令。
------解决方案--------------------
我的建议并不是让你直接去访问FTP,我的建议是用Java去模拟命令行执行FTP,就是说:

Runtime.exec()

然后控制输入和输出,一步步执行cmd命令,通过执行cmd命令来telnet到服务器A上,然后再借助服务器A上的ftpclient来进行下载。

如果你听说过按键精灵的话,就是类似的意思了。
------解决方案--------------------
为了简化Java代码,可以把组合操作做成批处理命令,那么Java直接执行这个批处理文件就行了。
------解决方案--------------------
探讨
还有个问题:
1、我需要循环同步多个文件,每个文件基本在1.5G左右;
2、一次循环,Runtime.exec()执行ftp命令后,是不等待该文件传输完毕的吧,这样在第一个文件没有传输完毕
的情况下,java程序循环到下一次,再次执行Runtime.exec()去传输第二个文件,这样不会出问题吧