从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);