1、使用官方正规的jar
commons-net-1.4.1.jar
jakarta-oro-2.0.8.jar
注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样
2、用ftp从linux服务器下载文件
System.out.println(new Date()+" 开始进入ftpDownload定时器"); //ftp服务器登录凭证 String host=PropertiesManager.getProperty("ftpHost"); int port=Integer.parseInt(PropertiesManager.getProperty("ftpPort")); String user=PropertiesManager.getProperty("ftpUser"); String password=PropertiesManager.getProperty("ftpPassword"); //获取时间字段信息 SimpleDateFormat sdf1=new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date date=new Date(); String today1 = sdf1.format(date); String today = sdf.format(date); String txtFileDir="/"; String txtSaveDir="E:/dataCenter/shengzhan/"; //检查本地磁盘目录是否存在txt文件 boolean flag = isTxtExit(today1,txtSaveDir); System.out.println(new Date()+" 判断txt文件是否存在:"+flag); FlagUtil.ftpDownloadRunning=true; //讲txt的下载操作和解析操作分成2个独立的操作进行,排除互相间的干扰 if(flag==false)//文件不存在进行ftp下载操作 { FTPClient ftp=null; try { //ftp的数据下载 ftp=new FTPClient(); ftp.connect(host, port); ftp.login(user, password); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); //设置linux环境 FTPClientConfig conf = new FTPClientConfig( FTPClientConfig.SYST_UNIX); ftp.configure(conf); //判断是否连接成功 int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); System.out.println("FTP server refused connection."); return; } //设置访问被动模式 ftp.setRemoteVerificationEnabled(false); ftp.enterLocalPassiveMode(); //检索ftp目录下所有的文件,利用时间字符串进行过滤 boolean dir = ftp.changeWorkingDirectory(txtFileDir); if (dir) { FTPFile[]fs = ftp.listFiles(); for(FTPFile f:fs) { if(f.getName().indexOf(today1+"2000")>0) { System.out.println(new Date()+" ftpDownload定时器下载txt成功"); File localFile = new File(txtSaveDir+f.getName()); OutputStream ios = new FileOutputStream(localFile); ftp.retrieveFile(f.getName(), ios); ios.close(); break; } } } } catch (Exception e) { e.printStackTrace(); System.out.println(new Date()+" ftp下载txt文件发生错误"); } finally { if(ftp != null) try {ftp.disconnect();} catch (IOException ioe) {} }
3、使用ftp从windows服务器下载文件
public static boolean downFile( String url, //FTP服务器hostname int port,//FTP服务器端口 String username, //FTP登录账号 String password, //FTP登录密码 String remotePath,//FTP服务器上的相对路径 String fileName,//要下载的文件名 String localPath//下载后保存到本地的路径 ) { boolean success = false; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(url, port); //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username, password);//登录 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } System.out.println("aaa"); ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录 FTPFile[] fs = ftp.listFiles(); for(FTPFile ff:fs){ System.out.println("bb" + fs); if(ff.getName().equals(fileName)){ System.out.println("dd"); File localFile = new File(localPath+"/"+ff.getName()); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); System.out.println("ccc" +ff.getName()+fileName); is.close(); } } ftp.logout(); success = true; } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return success; }