从ftp服务器下载文件到本地

  • 格式:pdf
  • 大小:71.26 KB
  • 文档页数:5

从ftp服务器下载⽂件到本地

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class FtpTools {

private final static String ftphostaddr = "127.0.0.1";//服务器地址

private final static String ftppath = "E:\\ftp_data";//操作的服务器⽬录

private final static String ftpname = "Administrator";//服务器登录名

private final static String ftppwd = "ytd123456";//登录密码

private final static String localpath = "E:\\dt_data";

private final static String fileSeparator = System.getProperty("file.separator");

private static final Logger logger = LoggerFactory.getLogger(FtpTools.class);

public static void main(String[] args) {

FtpTools tools = new FtpTools();

tools.downFile("RDClass.java");

}

/**

* 从⽂件服务器上下载⽂件到本地

* @param filename

*/

public static void downFile(String filename) {

FTPClient ftp = initFtp();

try{

//4.指定要下载的⽬录

ftp.changeWorkingDirectory(ftppath);// 转移到FTP服务器⽬录

//5.遍历下载的⽬录

FTPFile[] fs = ftp.listFiles();

for (FTPFile ff : fs) {

//解决中⽂乱码问题,两次解码

byte[] bytes=ff.getName().getBytes("iso-8859-1");

String fn=new String(bytes,"utf8");

if (fn.equals(filename)) {

//6.写操作,将其写⼊到本地⽂件中

logger.info("下载⽂件:"+filename+"开始:"+System.currentTimeMillis());

File localFile = new File(localpath +fileSeparator+ ff.getName());

OutputStream is = new FileOutputStream(localFile);

ftp.retrieveFile(ff.getName(), is);

//7.判断本地⽂件是否正确写⼊,如果正确写⼊,将⽂件服务器上的⽂件删除(这步⼀般不⽤操作,为啥要删除服务器上⾯的⽂件呢)

if(localFile.exists()){

logger.info("删除服务器上⽂件:"+filename);

ftp.deleteFile(ff.getName());

}

logger.info("下载⽂件:"+filename+"结束:"+System.currentTimeMillis());

is.close();

}

}

ftp.logout();

}catch(Exception e){

e.printStackTrace();

new Exception("从服务器下载⽂件过程中发⽣错误");

}finally{

if (ftp.isConnected()) {

try {

ftp.disconnect();

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

}

public static FTPClient initFtp() {

int reply;

FTPClient ftp = new FTPClient();

try {

// 1.连接服务器

//ftp.connect(ftphostaddr);

ftp.connect(ftphostaddr, 21);

// 2.登录服务器 如果采⽤默认端⼝,可以使⽤ftp.connect(url)的⽅式直接连接FTP服务器

ftp.login(ftpname, ftppwd); ftp.login(ftpname, ftppwd);

// 3.判断登陆是否成功

reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

}

} catch (Exception e) {

e.printStackTrace();

new Exception("服务器连接失败");

}

return ftp;

}

}

原版(参数写死)

public void initDtData(fhycgz e) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

String thatDate = sdf.format(e.getRq());

String dirPath = fhycgzController.class.getClassLoader().getResource("/").getPath() + File.separator + "conf";

Properties p = new Properties();

try {

p.load(new FileInputStream(dirPath + File.separator + "app.properties"));

String addr = p.getProperty("ftp.dt.service.addr");

String ftpPath = p.getProperty("ftp.dt.service.ftpPath");

String name = p.getProperty("ftp.dt.service.name");

String pwd = p.getProperty("ftp.dt.service.pwd");

String localPath = p.getProperty("ftp.dt.service.localPath");

String fileName = "RDClass.java";

FtpTools.downFile(addr, name, pwd, 21, ftpPath, fileName, localPath);

// 遍历本地所有⽂件,查找当天的dt⽂件

File file = new File(localPath);

File[] listFiles = file.listFiles();

for (File f : listFiles) {

logger.info("getName--->=" + f.getName());

if (f.isFile() && f.getName().contains(thatDate)) {

this.getTdByTdName(localPath + File.separator + f.getName());

}

}

} catch (IOException e1) {

e1.printStackTrace();

}

}

优化版1(从配置⽂件读取参数)

package com.ytd.ebos.platform.fhycgz.controller;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class FtpTools {

private static final Logger logger = LoggerFactory.getLogger(FtpTools.class);

public static void main(String[] args) {

// FtpTools tools = new FtpTools();

// tools.downFile("RDClass.java");

}

/**

* 从⽂件服务器上下载⽂件到本地

*

* @param addr 服务器地址

* @param name 服务器登录名

* @param pwd 登录密码

* @param port 端⼝

* @param ftpPath 操作的服务器⽬录

* @param fileName 需要下载的⽂件名

* @param localPath 本地存放⽂件的⽬录

*/

public static void downFile(String addr,String name,String pwd,int port,String ftpPath,String fileName,String localPath) {

FTPClient ftp = initFtp(addr,name,pwd,port);