当前位置: 移动技术网 > IT编程>开发语言>Java > sftp和ftp 根据配置远程服务器地址下载文件到当前服务

sftp和ftp 根据配置远程服务器地址下载文件到当前服务

2019年07月22日  | 移动技术网IT编程  | 我要评论

最高追击令全集,乡村神医txt下载,发电机修理

废话不多说,关键代码如下所示:

 

package com.eastrobot.remote; 
import java.util.list; 
import java.util.concurrent.executorservice; 
import java.util.concurrent.executors; 
import org.apache.commons.logging.log; 
import org.apache.commons.logging.logfactory; 
import com.eastrobot.util.propertiesutil; 
/** 
* full.zhang 
* 
* ftp/sftp抽象方法类 
* 
*/ 
public abstract class fileremote { 
private static final string ftp_mode = "ftp"; 
private static final string sftp_mode = "sftp"; 
public static string ftproot; 
public static string mode; 
public static string host; 
public static string username; 
public static string password; 
public static string port; 
private static fileremote client = null; 
// 最大一次性下载50个文件 
public static int max = 50; 
private final static log logger = logfactory.getlog(fileremote.class); 
public static fileremote getinstance() { 
if (client == null) { 
ftproot = propertiesutil.getstring("transfer.root"); 
mode = propertiesutil.getstring("transfer.mode"); 
host = propertiesutil.getstring("transfer.host"); 
username = propertiesutil.getstring("transfer.username"); 
password = propertiesutil.getstring("transfer.password"); 
port = propertiesutil.getstring("transfer.port"); 
if (mode.equals(ftp_mode)) { 
client = new fileftpremote(); 
} else if (mode.equals(sftp_mode)) { 
client = new filesftpremote(); 
} 
} 
return client; 
} 
/** 
* 执行定时任务 
*/ 
public void process() { 
logger.debug("----------------------------------------进入定时下载远程文件"); 
// 创建线程池 
executorservice exec = executors.newsinglethreadexecutor(); 
exec.execute(new runnable() { 
@override 
public void run() { 
// 建立连接 
initftpinfo(host, port, username, password); 
// 远程服务所有源文件路径集合 
list<string> listsourcepath = listremotefilepath(ftproot); 
if (listsourcepath.isempty()) { 
logger.debug("____________________释放连接"); 
client.closeconnection(); 
return; 
} 
if (listsourcepath.size() > max) { 
listsourcepath = listsourcepath.sublist(0, max); 
} 
for (string path : listsourcepath) { 
downloadremotefile(path); 
} 
logger.debug("____________________释放连接"); 
client.closeconnection(); 
} 
}); 
exec.shutdown(); 
} 
/** 
* 初始化连接 
* 
* @param host 
* @param port 
* @param username 
* @param password 
* @throws exception 
* @return 
*/ 
public abstract void initftpinfo(string host, string port, string username, string password); 
/** 
* 下载远程服务下文件到本地服务 
* 
* @param path 
* @return 
* @throws exception 
*/ 
public abstract void downloadremotefile(string filepath); 
/** 
* 获取远程服务下指定目录下的所有文件路径集合(包含子目录下文件) 
* 
* @param path 
* @return 
*/ 
public abstract list<string> listremotefilepath(string path); 
/** 
* 释放连接 
*/ 
public abstract void closeconnection(); 
} 
[java] view plain copy
package com.eastrobot.remote; 
import java.io.file; 
import java.io.fileoutputstream; 
import java.io.ioexception; 
import java.io.outputstream; 
import java.util.arraylist; 
import java.util.list; 
import org.apache.commons.io.ioutils; 
import org.apache.commons.lang.stringutils; 
import org.apache.commons.logging.log; 
import org.apache.commons.logging.logfactory; 
import org.apache.commons.net.ftp.ftpclient; 
import org.apache.commons.net.ftp.ftpfile; 
import org.apache.commons.net.ftp.ftpreply; 
import com.eastrobot.command.commander; 
public class fileftpremote extends fileremote { 
protected ftpclient ftpclient; 
private string encoding = "utf-8"; 
private boolean binarytransfer = true; 
private final static log logger = logfactory.getlog(fileftpremote.class); 
@override 
public void initftpinfo(string host, string port, string username, string password) { 
try { 
// 构造一个ftpclient实例 
ftpclient = new ftpclient(); 
// 设置字符集 
ftpclient.setcontrolencoding(encoding); 
// 连接ftp服务器 
ftpclient.connect(host, stringutils.isnotblank(port) ? integer.valueof(port) : 21); 
// 连接后检测返回码来校验连接是否成功 
int reply = ftpclient.getreplycode(); 
if (ftpreply.ispositivecompletion(reply)) { 
// 登陆到ftp服务器 
if (ftpclient.login(username, password)) { 
setfiletype(); 
} 
ftpclient.login(username, password); 
} else { 
ftpclient.disconnect(); 
logger.error("ftp服务拒绝连接!"); 
} 
} catch (exception e) { 
if (ftpclient.isconnected()) { 
try { 
ftpclient.disconnect(); // 断开连接 
} catch (ioexception e1) { 
logger.error("ftp服务连接断开失败!"); 
} 
} 
logger.error("ftp服务连接失败!"); 
} 
} 
/** 
* 设置文件传输类型 
*/ 
private void setfiletype() { 
try { 
if (binarytransfer) { 
ftpclient.setfiletype(ftpclient.binary_file_type); 
} else { 
ftpclient.setfiletype(ftpclient.ascii_file_type); 
} 
} catch (ioexception e) { 
e.printstacktrace(); 
} 
} 
@override 
public void downloadremotefile(string filepath) { 
if (stringutils.endswith(filepath, "/") || stringutils.endswith(filepath, file.separator)) { 
filepath = filepath.substring(0, filepath.length() - 1); 
} 
file savefile = new file(filepath); 
if (savefile.exists()) { 
return; 
} 
// 文件所在目录 
string path = filepath.substring(0, filepath.lastindexof("/")); 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
outputstream output = null; 
try { 
// 创建目标文件路径 
if (!savefile.getparentfile().exists()) { 
savefile.getparentfile().mkdirs(); 
} 
savefile.createnewfile(); 
// 转移到ftp服务器目录 
ftpclient.changeworkingdirectory(path); 
output = new fileoutputstream(savefile); 
ftpclient.retrievefile(filepath, output); 
} catch (ioexception e) { 
logger.debug("文件:" + filepath + "______________________下载失败!"); 
e.printstacktrace(); 
} finally { 
logger.debug("文件:" + filepath + "______________________下载成功!"); 
ioutils.closequietly(output); 
} 
} 
@override 
public list<string> listremotefilepath(string path) { 
list<string> list = new arraylist<string>(); 
try { 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
boolean changedir = ftpclient.changeworkingdirectory(path); 
if (changedir) { 
ftpclient.setcontrolencoding(encoding); 
ftpfile[] files = ftpclient.listfiles(); 
for (ftpfile file : files) { 
if (list.size() >= max) { 
break; 
} 
if (file.isdirectory()) { 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
list.addall(this.listremotefilepath(path + file.getname())); 
} else if (changedir) { 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
file savefile = new file(path + file.getname()); 
if (!savefile.exists()) { 
list.add(path + file.getname()); 
} 
} 
} 
} 
} catch (exception e) { 
e.printstacktrace(); 
} 
return list; 
} 
@override 
public void closeconnection() { 
if (ftpclient != null) { 
try { 
ftpclient.logout(); 
} catch (ioexception e) { 
e.printstacktrace(); 
} finally { 
if (ftpclient.isconnected()) { 
try { 
ftpclient.disconnect(); 
} catch (ioexception e) { 
e.printstacktrace(); 
} 
} 
} 
} 
} 
} 
[java] view plain copy
package com.eastrobot.remote; 
import java.io.file; 
import java.io.fileoutputstream; 
import java.util.arraylist; 
import java.util.list; 
import java.util.properties; 
import java.util.vector; 
import org.apache.commons.io.ioutils; 
import org.apache.commons.lang.stringutils; 
import org.apache.commons.logging.log; 
import org.apache.commons.logging.logfactory; 
import com.eastrobot.command.commander; 
import com.jcraft.jsch.channel; 
import com.jcraft.jsch.channelsftp; 
import com.jcraft.jsch.jsch; 
import com.jcraft.jsch.session; 
import com.jcraft.jsch.sftpattrs; 
import com.jcraft.jsch.sftpexception; 
import com.jcraft.jsch.channelsftp.lsentry; 
public class filesftpremote extends fileremote { 
protected session session = null; 
protected channelsftp channel = null; 
private final static log logger = logfactory.getlog(filesftpremote.class); 
@override 
public void initftpinfo(string host, string port, string username, string password) { 
try { 
jsch jsch = new jsch(); // 创建jsch对象 
session = jsch.getsession(username, host, stringutils.isnotblank(port) ? integer.valueof(port) : 22); 
session.setpassword(password); // 设置密码 
properties config = new properties(); 
config.put("stricthostkeychecking", "no"); 
session.setconfig(config); // 为session对象设置properties 
session.settimeout(60000); // 设置timeout时间 
session.connect(); // 通过session建立链接 
channel chan = session.openchannel("sftp"); // 打开sftp通道 
chan.connect(); // 建立sftp通道的连接 
channel = (channelsftp) chan; 
} catch (exception e) { 
logger.error("sftp连接失败"); 
e.printstacktrace(); 
} 
} 
@override 
public void downloadremotefile(string filepath) { 
if (stringutils.endswith(filepath, "/") || stringutils.endswith(filepath, file.separator)) { 
filepath = filepath.substring(0, filepath.length() - 1); 
} 
file savefile = new file(filepath); 
fileoutputstream output = null; 
try { 
if (savefile.exists()) { 
return; 
} 
// 创建目标文件路径 
if (!savefile.getparentfile().exists()) { 
savefile.getparentfile().mkdirs(); 
} 
savefile.createnewfile(); 
// 文件所在目录 
string path = filepath.substring(0, filepath.lastindexof("/")); 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
channel.cd(path); 
channel.get(filepath, new fileoutputstream(savefile)); 
logger.debug("文件:" + filepath + "____________________________________________下载成功!"); 
} catch (exception e) { 
logger.debug("文件:" + filepath + "____________________________________________下载失败!"); 
e.printstacktrace(); 
} finally { 
ioutils.closequietly(output); 
} 
} 
@suppresswarnings("unchecked") 
@override 
public list<string> listremotefilepath(string path) { 
list<string> list = new arraylist<string>(); 
vector<lsentry> v = null; 
try { 
if (!stringutils.endswith(path, "/") && stringutils.endswith(path, file.separator)) { 
path = path + file.separator; 
} 
v = channel.ls(path); 
} catch (sftpexception e) { 
e.printstacktrace(); 
} 
for (lsentry lsentry : v) { 
if (list.size() >= max) { 
break; 
} 
if (!".".equals(lsentry.getfilename()) && !"..".equals(lsentry.getfilename())) { 
sftpattrs attrs = lsentry.getattrs(); 
if (attrs.isdir()) { 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
list.addall(this.listremotefilepath(path + lsentry.getfilename())); 
} else { 
if (!stringutils.endswith(path, "/") && !stringutils.endswith(path, file.separator)) { 
if (commander.islinux) { 
path = path + file.separator; 
} else { 
path = path + "/"; 
} 
} 
file savefile = new file(path + lsentry.getfilename()); 
if (!savefile.exists()) { 
list.add(path + lsentry.getfilename()); 
} 
} 
} 
} 
return list; 
} 
@override 
public void closeconnection() { 
try { 
if (channel != null) { 
channel.quit(); 
channel.disconnect(); 
} 
if (session != null) { 
session.disconnect(); 
} 
} catch (exception e) { 
e.printstacktrace(); 
} 
} 
public session getsession() { 
return session; 
} 
public void setsession(session session) { 
this.session = session; 
} 
public channelsftp getchannel() { 
return channel; 
} 
public void setchannel(channelsftp channel) { 
this.channel = channel; 
} 
}

以上所述是小编给大家介绍的sftp和ftp 根据配置远程服务器地址下载文件到当前服务,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网