欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

sftp和ftp 根據(jù)配置遠(yuǎn)程服務(wù)器地址下載文件到當(dāng)前服務(wù)

 更新時(shí)間:2016年10月26日 14:26:09   作者:zhangqinfu  
這篇文章主要介紹了sftp和ftp 根據(jù)配置遠(yuǎn)程服務(wù)器地址下載文件到當(dāng)前服務(wù)的相關(guān)資料本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下

廢話不多說,關(guān)鍵代碼如下所示:

 

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; 
} 
/** 
* 執(zhí)行定時(shí)任務(wù) 
*/ 
public void process() { 
LOGGER.debug("----------------------------------------進(jìn)入定時(shí)下載遠(yuǎn)程文件"); 
// 創(chuàng)建線程池 
ExecutorService exec = Executors.newSingleThreadExecutor(); 
exec.execute(new Runnable() { 
@Override 
public void run() { 
// 建立連接 
initFtpInfo(host, port, username, password); 
// 遠(yuǎn)程服務(wù)所有源文件路徑集合 
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); 
/** 
* 下載遠(yuǎn)程服務(wù)下文件到本地服務(wù) 
* 
* @param path 
* @return 
* @throws Exception 
*/ 
public abstract void downloadRemoteFile(String filePath); 
/** 
* 獲取遠(yuǎn)程服務(wù)下指定目錄下的所有文件路徑集合(包含子目錄下文件) 
* 
* @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 { 
// 構(gòu)造一個FtpClient實(shí)例 
ftpClient = new FTPClient(); 
// 設(shè)置字符集 
ftpClient.setControlEncoding(encoding); 
// 連接FTP服務(wù)器 
ftpClient.connect(host, StringUtils.isNotBlank(port) ? Integer.valueOf(port) : 21); 
// 連接后檢測返回碼來校驗(yàn)連接是否成功 
int reply = ftpClient.getReplyCode(); 
if (FTPReply.isPositiveCompletion(reply)) { 
// 登陸到ftp服務(wù)器 
if (ftpClient.login(username, password)) { 
setFileType(); 
} 
ftpClient.login(username, password); 
} else { 
ftpClient.disconnect(); 
LOGGER.error("ftp服務(wù)拒絕連接!"); 
} 
} catch (Exception e) { 
if (ftpClient.isConnected()) { 
try { 
ftpClient.disconnect(); // 斷開連接 
} catch (IOException e1) { 
LOGGER.error("ftp服務(wù)連接斷開失敗!"); 
} 
} 
LOGGER.error("ftp服務(wù)連接失敗!"); 
} 
} 
/** 
* 設(shè)置文件傳輸類型 
*/ 
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 { 
// 創(chuàng)建目標(biāo)文件路徑 
if (!saveFile.getParentFile().exists()) { 
saveFile.getParentFile().mkdirs(); 
} 
saveFile.createNewFile(); 
// 轉(zhuǎn)移到FTP服務(wù)器目錄 
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(); // 創(chuàng)建JSch對象 
session = jsch.getSession(username, host, StringUtils.isNotBlank(port) ? Integer.valueOf(port) : 22); 
session.setPassword(password); // 設(shè)置密碼 
Properties config = new Properties(); 
config.put("StrictHostKeyChecking", "no"); 
session.setConfig(config); // 為Session對象設(shè)置properties 
session.setTimeout(60000); // 設(shè)置timeout時(shí)間 
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; 
} 
// 創(chuàng)建目標(biāo)文件路徑 
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 根據(jù)配置遠(yuǎn)程服務(wù)器地址下載文件到當(dāng)前服務(wù),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 如何通過自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性

    如何通過自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性

    這篇文章主要介紹了如何通過自定義spring?invalidator注解校驗(yàn)數(shù)據(jù)合法性,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 簡單講解Java的Future編程模式

    簡單講解Java的Future編程模式

    這篇文章主要介紹了Java的Future編程模式,包括對異步和并發(fā)的一些設(shè)計(jì)思維,需要的朋友可以參考下
    2015-11-11
  • 如何將java或javaweb項(xiàng)目打包為jar包或war包

    如何將java或javaweb項(xiàng)目打包為jar包或war包

    本文主要介紹了如何將java或javaweb項(xiàng)目打包為jar包或war包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java中從JSON轉(zhuǎn)Java實(shí)體的多種方法詳解

    Java中從JSON轉(zhuǎn)Java實(shí)體的多種方法詳解

    在現(xiàn)在的日常開發(fā)中不管前端還是后端,JSON 格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在,這篇文章主要給大家介紹了關(guān)于Java中從JSON轉(zhuǎn)Java實(shí)體的多種方法,需要的朋友可以參考下
    2023-12-12
  • Spring?Boot實(shí)現(xiàn)JWT?token自動續(xù)期的實(shí)現(xiàn)

    Spring?Boot實(shí)現(xiàn)JWT?token自動續(xù)期的實(shí)現(xiàn)

    本文主要介紹了Spring?Boot實(shí)現(xiàn)JWT?token自動續(xù)期,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java實(shí)現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    Java實(shí)現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java調(diào)用ElasticSearch?API的效果資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-03-03
  • 詳解java中反射機(jī)制(含數(shù)組參數(shù))

    詳解java中反射機(jī)制(含數(shù)組參數(shù))

    這篇文章主要介紹了詳解java中反射機(jī)制(含數(shù)組參數(shù))的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java反射機(jī)制介紹

    Java反射機(jī)制介紹

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個類,都可以知道這個類的所有屬性和方法,對于任何一個對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為Java的反射機(jī)制
    2022-08-08
  • 詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題

    詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題

    這篇文章主要介紹了詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 徹底搞懂Java多線程(四)

    徹底搞懂Java多線程(四)

    這篇文章主要給大家介紹了關(guān)于Java面試題之多線程和高并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07

最新評論