java使用sftp与linux之间进行文件传输解压

最近有个需求是上传一个压缩包到服务器并实现解压缩,网上找了几个使用ftp上传的例子但是没有实现,各方面总结加上自己的理解编写,最后使用sftp进行涉及,最后实现了文件的上传、下载、删除、解压缩以及文件夹的创建。特此记录下一下,以便不时之需。

1.简单了解 ftp和sftp的区别

在linux系统中,最长使用到的文件传输的方式莫过于ftp和sftp.
FTP(File Transfer Protocol),即文件传输协议,用于Internet上控制文件的双向传输。
FTP在linux系统中,传输默认的端口为21端口,通常以ASCII码和二进制的方式传输数据,支持主动模式和被动模式两种方式。
但Linux默认是不提供ftp的,需要你额外安装FTP服务器。
SFTP(Secure File Transfer Protocol),即文件加密传输协议,
SFTP在linux系统中,传输默认的端口为22端口,这种传输方式更为安全,传输双方既要进行密码安全验证,还要进行基于密钥的安全验证,有效的防止了“中间人”的威胁和攻击。
在使用linux的centos服务器系统中,两个比较起来,ftp传输会比sftp传输速率快,毕竟sftp牺牲了一定的效率,以保证传输过程的安全。

2.简单了解ChannelSftp类

ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
put(): 文件上传
get(): 文件下载
cd(): 进入指定目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
还有很多方法,有需要去看源码

2.代码

直接贴代码,里面有注释
SFTPInfo
linux的环境参数

package cn.xgs.file2linux;



/**
 * @version: 1.0
 * @Description:文件上传的环境配置
 * @author: zshuai
 * @date: 2019年4月9日
 */
public class SFTPInfo {  
    public static final String SFTP_REQ_HOST = "192.168.189.138";      //ip
    public static final String SFTP_REQ_USERNAME = "root";      //username
    public static final String SFTP_REQ_PASSWORD = "rootzs";      //password
    public static final int SFTP_DEFAULT_PORT = 22;      //端口
}

SFTPUtil

package cn.xgs.file2linux;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.opensymphony.xwork2.util.finder.ClassFinder.Info;
/**
 * @version: 1.0
 * @Description:文件上传/删除/解压缩
 * @author: zshuai
 * @date: 2019年4月9日
 */
public class SFTPUtil {
	private static final Logger LOG = LoggerFactory.getLogger(SFTPUtil.class);

	/*
	 * @Description: 获取文件上传的安全通道
	 * @param session
	 * @return
	 */
	public static Channel getChannel(Session session) {
		Channel channel = null;
		try {
			channel = session.openChannel("sftp");
			channel.connect();
			System.out.println("获取连接成功");
			LOG.info("get Channel success!");
		} catch (JSchException e) {
			LOG.info("get Channel fail!", e);
		}
		return channel;
	}

	/*
	 * @Description:获取连接信息,返回session,在session中获取安全通道
	 * @param host:连接主机ip
	 * @param port:端口号,一般sftp依托于ssh。端口号22
	 * @param username:用户名
	 * @
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值