java 下载异地FTP中的zip文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 下载异地FTP中的zip文件相关的知识,希望对你有一定的参考价值。

public class FtpClientUtil
FtpClient ftpClient;
private String server;
private int port;
private String userName;
private String userPassword;

public FtpClientUtil(String server,int port,String userName,String userPassword)

this.server=Constants.FTP_IP;
this.port=Constants.FTP_PORT;
this.userName=Constants.USER_NAME;
this.userPassword=Constants.USER_PASSWORD;

/**
* 链接到服务器
* @return
*/
public boolean open()

if(ftpClient!=null&&ftpClient.serverIsOpen())
return true;
try

ftpClient= new FtpClient();
ftpClient.openServer(server,port);
ftpClient.login(userName, userPassword);
ftpClient.binary();
return true;

catch(Exception e)

e.printStackTrace();
ftpClient=null;
return false;



public boolean cd(String dir)
boolean f = false;
try
ftpClient.cd(dir);
catch (IOException e)
e.printStackTrace();
return f;

return true;


/**
* 从FTP服务器上下载文件并返回下载文件长度
* @param ftpDirectoryAndFileName
* @param localDirectoryAndFileName
* @return
* @throws Exception
*/
public long download(String ftpDirectoryAndFileName,String localDirectoryAndFileName)throws Exception

long result = 0;
if(!open())
return result;
TelnetInputStream is = null;
FileOutputStream os = null;
try

is = ftpClient.get(ftpDirectoryAndFileName);
java.io.File outfile = new java.io.File(localDirectoryAndFileName);
os = new FileOutputStream(outfile);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1)

os.write(bytes, 0, c);
result = result + c;


catch (Exception e)

throw e;

finally

if (is != null)
is.close();
if (os != null)
os.close();


return result;


这里的 ftpDirectoryAndFileName和localDirectoryAndFileName按照字面意思第一个是ftp的目录地址,后面的是本地的目录地址。
但是ftpDirectoryAndFileName和localDirectoryAndFileName应该怎么写呢?
我ftpDirectoryAndFileName为:"",localDirectoryAndFileName为:"E:\\temp_workspace\\tmp\\"

提示sun.net.ftp.FtpProtocolException: 501 Syntax error: Invalid number of parameters.的错误。

我只要下载这部分的,代码测试好了的再贴,我会再加50分的
这部分已经搞定了,是少了一个获取FTP服务器上的数据命名规则,或者载入sun下的ftpClient的一个包就搞定了,谢谢你们,只能给一个人分,那就给第一个回答问题的人吧!:)

参考技术A 这个要做定时任务的,ftp不可能主动给你发,只能自己每隔多长时间就去检索一次,应该把ftp文件目录结构和文件名称全部存入数据库,在下载时候对文件的标识状态位进行更新,方便于对文件的判断。然后从ftp下载文件即可。如果需要连接ftp下载文件的代码,可以发送邮件到JavaWebDevelop@hotmial.com 参考技术B 没关注过下载的问题。
is = ftpClient.get(ftpDirectoryAndFileName);
这里,你将ftpDirectoryAndFileName设置为"",那么将会从哪下载什么文件呢?
从一个空的地方得到FTP的输入流?
感觉应该指定某个FTP地址上的某个文件吧。
参考技术C 好像需要一个支持jar包把,把ftp4j的下载地址贴出来

参考资料:http://www.hatxt.com

本回答被提问者采纳

使用 Java 中的 Selenium WebDriver 下载 zip 文件 - 下载弹出窗口总是来

【中文标题】使用 Java 中的 Selenium WebDriver 下载 zip 文件 - 下载弹出窗口总是来【英文标题】:Download a zip file using Selenium WebDriver in Java - Download Popup is coming always 【发布时间】:2015-01-18 18:05:32 【问题描述】:

我正在使用以下代码从网站下载文件,我正在使用 Firefox 32.0.3 和 Selenium jar 版本 - 2.43。

    FirefoxProfile  firefoxProfile = new FirefoxProfile();
    firefoxProfile.setPreference("browser.download.folderList",2);
    firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
    firefoxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
    firefoxProfile.setPreference("browser.download.dir","C:\\RDM_Files");
    firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/zip;application/octet-stream;application/x-zip;application/x-zip-compressed");
    firefoxProfile.setPreference("plugin.disable_full_page_plugin_for_types", "application/zip");

    WebDriver driver = new FirefoxDriver(firefoxProfile);

我检查了正在下载的文件的 MIME 类型是 application/zip。每次我尝试下载文件时,都会出现一个窗口,要求打开文件或保存文件。

我搜索了 ***.com 并找到了与处理 .pdf 文件但不是 zip 文件相关的帖子。请帮忙

【问题讨论】:

【参考方案1】:

我认为您正在寻找类似的东西

//common to all the cases
FirefoxProfile prof = new FirefoxProfile();

//Case:1 - Use this case to set download this code to your browser's default location
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");

//Case:2 - Download file to Desktop
//prof.setPreference("browser.download.folderList", 0);
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");

//Case:3 - Download to custom folder path. Replace d:\\selenium with your Download Location 
prof.setPreference("browser.download.dir","D:\\selenium\\");
prof.setPreference("browser.download.folderList", 2);
prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");

//This will work for all cases mentioned above
WebDriver driver = new FirefoxDriver(prof);
driver.get("http://docs.seleniumhq.org/download/");
driver.findElement(By.xpath("//tr[1]/td[4]/a[text()='Download']")).click();

【讨论】:

【参考方案2】:

禁止弹出系统非网页下载/保存对话框。

FirefoxProfile prof = new FirefoxProfile();

ffprofile.setPreference("browser.download.panel.shown", false);
ffprofile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/zip");

//ffprofile.setPreference("browser.download.folderList", 1);  // Default to /home/user/Downloads in Linux.
ffprofile.setPreference("browser.download.folderList", 2); 
ffprofile.setPreference("browser.download.dir", "/tmp");

【讨论】:

以上是关于java 下载异地FTP中的zip文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 FTP 下载时无法识别 Zip 文件

liunx下把网站文件压缩为zip文件备份提供给ftp下载

org.apache.commons.net.ftp.FTPClient下载中文文件夹乱码如何处理?

突破PHP免费空间文件格式上传限制-FTP传zip,PHP解压zip文件 - 比单文件管理器更好用

突破PHP免费空间文件格式上传限制-FTP传zip,PHP解压zip文件 - 比单文件管理器更好用

从 FTP 服务器上的 Zip 解压 csv 文件