这篇文章主要介绍了JSch中怎么使用sftp协议实现服务器文件上传下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JSch中怎么使用sftp协议实现服务器文件上传下载文章都会有所收获,下面我们一起来看看吧。
JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器
Jsch功能很强大,博主这里主要用来做文件操作
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.53</version>
</dependency>
我把我的SftpUtil贴下面了,注释还算清楚
/**
* Content :sftp协议文件上传下载
* Created by kl on 2016/5/6.
*/
public class SftpUtil {
/**
* 上传文件到指定服务器
* @param ip 连接ip
* @param user 用户名
* @param psw 密码
* @param port 端口 <=0 为默认端口
* @param fielPath 上传的服务器路径
* @param serverFileName 服务器保存的文件名
* @param instream 要上传的文件流
* @throws Exception
*/
public static void sftpFileUpload(String ip,int port, String user, String psw, String fielPath,String serverFileName,InputStream instream) throws Exception {
Session session =getSession( ip, user, psw, port);
Channel channel = null;
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd(fielPath);
OutputStream outstream = sftp.put(serverFileName);
byte b[] = new byte[1024*200];//每次传输200k
int n;
while ((n = instream.read(b)) != -1) {
outstream.write(b, 0, n);
}
outstream.flush();
outstream.close();
instream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
if (channel!=null)channel.disconnect();
}
}
/**
* 从指定服务器下载文件到本地
* @param ip 连接ip
* @param user 用户名
* @param psw 密码
* @param port 端口 <=0 为默认端口
* @param fielPath 服务器文件路径
* @param serverFileName 要下载的文件名
* @param outputStream 输出到本地的文件流
* @throws Exception
*/
public static void sftpFileDownload(String ip,int port, String user, String psw, String fielPath,String serverFileName,OutputStream outputStream) throws Exception {
Session session =getSession( ip, user, psw, port);
Channel channel = null;
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd(fielPath);
sftp.get(serverFileName,outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
if (channel!=null)channel.disconnect();
}
}
/**
* 删除服务器指定文件
* @param ip 连接ip
* @param user 用户名
* @param psw 密码
* @param port 端口 <=0 为默认端口
* @param fielPath 服务器文件路径
* @param serverFileName 要删除的文件名
* @throws Exception
*/
public static void sftpFileDelete(String ip,int port, String user, String psw, String fielPath,String serverFileName) throws Exception {
Session session =getSession( ip, user, psw, port);
Channel channel = null;
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd(fielPath);
sftp.rm(serverFileName);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
if (channel!=null)channel.disconnect();
}
}
/**
* 查看指定目录所有文件
* @param ip
* @param user
* @param psw
* @param port
* @param fielPath
* @throws Exception
*/
public static Vector seeServerFileList(String ip, int port,String user, String psw, String fielPath)throws Exception{
Session session =getSession( ip, user, psw, port);
Channel channel = null;
Vector v=null;
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd(fielPath);
//列出服务器指定的文件列表
v = sftp.ls(fielPath);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
if (channel!=null)channel.disconnect();
}
return v;
}
/**
* 连接服务器
* @param ip 服务器地址
* @param user 用户名
* @param psw 密码
* @param port 连接端口
* @return
* @throws Exception
*/
public static Session getSession(String ip, String user, String psw, int port)throws Exception{
Session session = null;
JSch jsch = new JSch();
if (port <= 0) {
//连接服务器,采用默认端口
session = jsch.getSession(user, ip);
} else {
session = jsch.getSession(user, ip, port);
}
//如果服务器连接不上,则抛出异常
if (session == null) {
throw new Exception("sftp session is null");
}
session.setPassword(psw);//设置密码
//设置登陆超时时间
session.connect(30000);//30s
return session;
}
}
关于“JSch中怎么使用sftp协议实现服务器文件上传下载”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JSch中怎么使用sftp协议实现服务器文件上传下载”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。