FTP下载
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Vector;
import org.apache.log4j.Logger;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
*/
public class SftpUtils {
/** 日志对象 */
private static Logger log = Logger.getLogger(SftpUtils.class);
/** SFTP服务器主机地址(IP地址) */
private String host;
/** SFTP连接端口 */
private int port;
/** SFTP登录用户名 */
private String username;
/** SFTP登录密码 */
private String password;
/** SFTP连接会话 */
private Session session;
/**
* 无参构造方法
*/
public SftpUtils() {
}
/**
* 构造方法
*
* @param host
* SFTP服务器主机地址(IP地址)
* @param port
* SFTP连接端口
* @param username
* SFTP登录用户名
* @param password
* SFTP登录密码
* @throws JSchException
*/
public SftpUtils(String host, int port, String username, String password)
throws JSchException {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
// 获得SFTP服务器连接
this.createSession();
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 获得SFTP服务器连接
*
* @throws JSchException
* JSCH异常
*/
public void createSession() throws JSchException {
// 创建JSch对象
JSch jsch = new JSch();
// 根据登录用户名、SFTP服务器主机地址(IP地址)、SFTP连接端口获取一个Session对象
session = jsch.getSession(username, host, port);
// 设置登录密码
session.setPassword(password);
// 设置不验证 HostKey
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// 设置超时5分钟
session.setTimeout(5 * 60 * 1000);
try {
// 打开会话连接
session.connect();
} catch (JSchException jse) {
// 如果连接已打开,需要销毁连接
if (session.isConnected()) {
session.disconnect();
}
throw new JSchException(
"Connect to the server failed.Please check HOST["
+ host
+ "],PORT["
+ port
+ "],USERNAME["
+ username
+ "],PASSWORD["
+ password
+ "].And check the network connection is working or if the request was denied by the firewall:"
+ jse.getMessage());
}
}
/**
* 断开(销毁)Sessioin
*/
public void disSession() {
if (session != null) {
session.disconnect();
session = null;
}
}
/**
* 获得SFTP连接
*
* @return
* @throws JSchException
*/
private ChannelSftp getChannelSftp() throws JSchException {
// 打开SFTP连接通道
Channel channel = session.openChannel("sftp");
try {
// 打开渠道连接
channel.connect();
} catch (JSchException jse) {
// 如果连接已打开,需要销毁连接
if (channel.isConnected()) {
channel.disconnect();
}
throw new JSchException(
"Connect to the server failed.Please check HOST["
+ host
+ "],PORT["
+ port
+ "],USERNAME["
+ username
+ "],PASSWORD["
+ password
+ "].And check the network connection is working or if the request was denied by the firewall:"
+ jse.getMessage());
}
ChannelSftp channelSftp = (ChannelSftp) channel;
return channelSftp;
}
/**
* 断开(销毁)SFTP连接
*/
private void disChannelSftp(ChannelSftp channelSftp) {
if (channelSftp != null) {
channelSftp.disconnect();
channelSftp.exit();
channelSftp = null;
}
}
/**
* 上传文件
*
* @param directory
* 待上传的目录(如:/finance)
* @param uploadFile
* 待上传的文件
* @param uploadFileName
* 上传文件的新文件名(FTP服务器上存储的文件名,如:EACQ_YNLF_20130615.xls)
* @throws FileNotFoundException
* 文件未不到异常
* @throws SftpException
* SFTP异常
* @throws
*/
public void upload(String directory, File uploadFile, String uploadFileName)
throws JSchException, FileNotFoundException, SftpException {
// 获得SFTP服务器连接
ChannelSftp channelSftp = null;
BufferedInputStream binput = null;
try {
channelSftp = getChannelSftp();
// 进入目录
channelSftp.cd(directory);
// 创建往本地文件中输入的流
binput = new BufferedInputStream(new FileInputStream(uploadFile));
// 上传
channelSftp.put(binput, uploadFileName);
} finally {
if (binput != null) {
try {
binput.close();
} catch (IOException ioe) {
}
}
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
}
/**
* 下载文件
*
* @param directory
* 待下载目录(如:/finance)
* @param downloadFileName
* 待下载的文件名(EACQ_YNLF_20130615.xls)
* @param saveFile
* 下载后存入本地的文件
* @throws FileNotFoundException
* 文件未不到异常
* @throws SftpException
* SFTP异常
*/
public void download(String directory, String downloadFileName,
File saveFile) throws JSchException, FileNotFoundException,
SftpException {
ChannelSftp channelSftp = null;
BufferedOutputStream boutput = null;
try {
// 获得SFTP服务器连接
channelSftp = getChannelSftp();
// 进入目录
channelSftp.cd(directory);
// 创建往SFTP上输出的流
boutput = new BufferedOutputStream(new FileOutputStream(saveFile));
// 下载
channelSftp.get(downloadFileName, boutput);
} finally {
if (boutput != null) {
try {
boutput.close();
} catch (IOException ioe) {
}
}
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
}
/**
* 删除文件. 仅支持删除文件,不支持删除目录
*
* @param directory
* 待删除文件所在目录
* @param deleteFile
* 待删除的文件(文件名全称,如:EACQ_YNLF_20130615-up.xls)
* @throws SftpException
* SFTP异常
* @throws JSchException
*/
public void delete(String directory, String deleteFile)
throws JSchException, SftpException {
ChannelSftp channelSftp = null;
try {
// 获得SFTP服务器连接
channelSftp = getChannelSftp();
// 进入目录
channelSftp.cd(directory);
// 删除文件
channelSftp.rm(deleteFile);
} finally {
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
}
/**
* 列出目录下的文件
*
* @param directory
* 待列出的目录
* @return 目录中的所有文件名列表(包括后缀名,如:EACQ_YNLF_20130615.xls)
* @throws SftpException
* SFTP异常
*/
public Vector<String> listFiles(String directory) throws JSchException,
SftpException {
ChannelSftp channelSftp = null;
Vector<String> fileNameList = new Vector<String>();
try {
// 获得SFTP服务器连接
channelSftp = getChannelSftp();
Vector<Object> objectList = channelSftp.ls(directory);
for (Object obj : objectList) {
// 获取文件名(包括后缀名)
// -rw-r--r-- 1 hsm users 975872 Jul 9 03:26
// EACQ_YNLF_20130615.xls
String curStr = obj.toString();
curStr = curStr.substring(curStr.lastIndexOf(" ") + 1);
if (".".equals(curStr) || "..".equals(curStr)) {// .表示当前目录,..表示上一级目录
continue;
}
fileNameList.add(curStr);
}
} finally {
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
return fileNameList;
}
/**
* 用于模糊查询某个远程目录下的文件名称. 只要文件名中包含{valiStr}即可列出
*
* @param directory
* 远程目录
* @param valiStr
* 文件名称
* @return 远程目录下的文件名称列表(包括后缀名,如:EACQ_YNLF_20130615.xls)
* @throws SftpException
* SFTP异常
*/
public Vector<String> listFileNames(String directory, String valiStr)
throws JSchException, SftpException {
ChannelSftp channelSftp = null;
Vector<String> fileNameList = new Vector<String>();
try {
// 获得SFTP服务器连接
channelSftp = getChannelSftp();
Vector<Object> objectList = channelSftp.ls(directory);
for (Object obj : objectList) {
// 获取文件名(包括后缀名)
// -rw-r--r-- 1 hsm users 975872 Jul 9 03:26
// EACQ_YNLF_20130615.xls
String curStr = obj.toString();
curStr = curStr.substring(curStr.lastIndexOf(" ") + 1);
// 检查文件名是否包含{valiStr}
if (curStr.contains(valiStr)) {
// 包含即加如Vector
fileNameList.add(curStr);
}
}
} finally {
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
return fileNameList;
}
/**
* 检查文件是否存在
*
* @param directory
* 远程目录
* @param valiStr
* 文件名称
* @return 是否存在(true-存在 false-不存在)
* @throws SftpException
* SFTP异常
*/
public boolean isExists(String directory, String valiStr)
throws JSchException, SftpException {
ChannelSftp channelSftp = null;
try {
// 获得SFTP服务器连接
channelSftp = getChannelSftp();
Vector<Object> objectList = channelSftp.ls(directory);
for (Object obj : objectList) {
// 获取文件名(包括后缀名)
// -rw-r--r-- 1 hsm users 975872 Jul 9 03:26
// EACQ_YNLF_20130615.xls
String curStr = obj.toString();
curStr = curStr.substring(curStr.lastIndexOf(" ") + 1);
// 检查文件名是否包含{valiStr}
if (curStr.equals(valiStr)) {
return true;
}
}
} finally {
// 断开(销毁)SFTP连接
disChannelSftp(channelSftp);
}
return false;
}
// /**
// * 仅测试用
// *
// * @param args
// * @throws JSchException
// * @throws SftpException
// * @throws FileNotFoundException
// */
// public static void main(String[] args) {
// String IP = "10.10.110.21";
// int PORT = 22;
// String UNAME = "hsm";
// String PWD = "123321";
// String PATH = "/home/hsm/finance";
// SftpUtils utils = null;
// Vector<String> vector = null;
// try {
// utils = new SftpUtils(IP, PORT, UNAME, PWD);
// // 下载
// // utils.download("finance", "EACQ_YNLF_20130615-4.xls",
// // new File("H:\\workspace\\finance\\EACQ_YNLF_20130615-6.xls"));
// // 上传
// // utils.upload("finance", new
// // File("H:\\workspace\\finance\\EACQ_YNLF_20130615(New).xls"),
// // "EACQ_YNLF_20130615-up.xls");
// // 列出目录下的文件
// // vector = utils.listFiles("finance");
// // 用于查询某个远程目录下的文件名称
// // vector = utils.listFileNames("finance","EACQ_YNLF_20130615");
// // for (String str : vector) {
// // System.out.println(str);
// // }
// // 删除文件
// // utils.delete("finance", "test");
// } catch (Exception e) {
// e.printStackTrace();
// }
// // System.exit(0);
// }
}
FTP下载的更多相关文章
- ftp下载目录下所有文件及文件夹内(递归)
ftp下载目录下所有文件及文件夹内(递归) /// <summary> /// ftp文件上传.下载操作类 /// </summary> public class FTPH ...
- 批处理:Windows主机通过FTP下载远程Linux主机上文件
问题:在Windows上怎么写个批处理把多个文件FTP依次下载到本地某个目录. 批处理脚本示例: @echo off title Download db files. Don't close it!! ...
- (转)FTP操作类,从FTP下载文件
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- java ftp下载文件
1.使用官方正规的jar commons-net-1.4.1.jar jakarta-oro-2.0.8.jar 注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样 2. ...
- [windows]快速从ftp下载最新软件包的批处理脚本
背景 由于敏捷开发,快速迭代,我们项目一天会有三个版本,也就意味着我一天要去获取三次软件包.我负责服务端开发,所以我经常需要去拿最新的客户端.我们的客户端放置在一个公共的ftp上面.每天频繁登陆ftp ...
- C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令
如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...
- FTP下载导致Zip解压失败的原因
情形:网关通过FTP下载快钱对账文件时通过Apache下commons-net的commons-net-3.5.jar进行封装,对账文件中有中文和英文的文字,大部分情况下能够下载成功,而且也能解压成功 ...
- Python(x,y) 的 FTP 下载地址
因为 Python(x,y) 软件包托管在 Google code 上 https://code.google.com/p/pythonxy/,所以国内比较难下载. 这里推荐一个 FTP 下载地址:f ...
- http和ftp下载的区别
HTTP和FTP是两种网络传输协议的缩写,FTP是File Transportation Protocol(文件传输协议)的缩写,而HTTP则是Hyper Text Transportation Pr ...
- python从FTP下载文件
#!/usr/bin/python # -*- coding: utf-8 -*- """ FTP常用操作 """ from ftplib ...
随机推荐
- 微信错误提示code= -4/微信发送被拒绝
微信错误提示code= -4/微信发送被拒绝 在做第三方登录时.出现微信授权返回的错误码为:code= -4,原因是由于: (微信开放平台的签名填错了微信平台注冊的签名应该是:使用微信签名工具安卓到手 ...
- 微信 oauth 授权3
3. 请求 2的url会得到 { "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2Cot ...
- ASP.NET动态网站制作(25)-- ADO.NET(4)
前言:这节课老师主要讲网页当中内容的分页效果,自己写一个分页控件. 内容: 1.首先写出HTML代码: <div id="pager"> <%=GetPagerH ...
- linux驱动移植问题点
1.I2C地址是否和其它IC冲突.通过改地址解决 ——通常,以下三种情况的log表现相同:1.ic没连接到主板:2.i2c地址错误:3.该器件I2C地址与同组其它器件冲突 2.I2C通信是否受到其它s ...
- Ubuntu下MongoDB的安装和使用
本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过.(2017.09.07) 安装MongoDB MongoDB安装很简单, ...
- for循环的执行循序
先上一段代码,大家说出此方法的执行结果: public class Print{ static boolean out(char c){ System.out.println(c); return t ...
- SSH后台管理系统,实现查询+分页
一个搜索框,然后会获取大量信息,将信息进行分页,每一页显示固定条数. mysql中使用“like”和“%%”进行模糊匹配,用“limit”进行分页. 1.首先创建一个页面信息的实体类,代码如下: im ...
- 2318: Spoj4060 game with probability Problem
2318: Spoj4060 game with probability Problem Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 356 Sol ...
- 【BZOJ4448】[Scoi2015]情报传递 主席树+LCA
[BZOJ4448][Scoi2015]情报传递 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员能有若干名(可能没有)下线,除1名大头 ...
- &#x编码转换成汉字
import java.io.UnsupportedEncodingException; public class UnicodeDecoder { public static String esca ...