Jsch
JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,也可以集成它的功能到自己的应用程序。
SFTP
SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SFTP是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。(来自百度的解释)
要使用JSch,需要下载它的jar包,请从官网下载它:http://www.jcraft.com/jsch/
JSch支持三种文件传输模式:
OVERWRITE
完全覆盖模式,默认文件传输模式
RESUME
恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件,则会从上一次中断的地方续传
APPEND
追加模式,如果目标文件已存在,传输的文件将在目标文件后追加
ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
put(): 文件上传
get(): 文件下载
cd(): 进入指定目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
这里省略了方法的参数
swing中使用jsch做sftp文件上传
public class FileChooser extends JFrame implements ActionListener {
/**
* jsch 通过sftp上传文件
*/
private static final long serialVersionUID = 1L;
// 初始化参数--------------------------------
static String url = "162.2.11.190";
static String username = "root";
static String password = "cnp200@HW";
// 初始化参数--------------------------------
private static ChannelSftp channelSftp;
JButton open = null;
public static void main(String[] args) {
new FileChooser();
}
public FileChooser() {
JFrame jframe = new JFrame();// 实例化一个JFrame
JPanel jPanel = new JPanel(); // 创建一个轻量级容器
JToolBar jToolBar = new JToolBar(); // 提供了一个用来显示常用的 Action 或控件的组件
jframe.setVisible(true);// 可见
jframe.setSize(500, 500);// 窗体大小
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// close的方式
jframe.setContentPane(jPanel); // 设置 contentPane 属性。
JLabel jl = new JLabel("请选择:");// 创建一个Label标签
jl.setHorizontalAlignment(SwingConstants.LEFT);// 样式,让文字居中
jPanel.add("North", jl);// 将标签添加到容器中
jPanel.add("North", jToolBar);
jPanel.add("North", jToolBar);
open = new JButton("上传文件");// 将上传文件按钮添加到容器中
open.addActionListener(this);
jToolBar.add(open);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
// TODO Auto-generated method stub
JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
jfc.showDialog(new JLabel(), "选择");
/** 得到选择的文件* */
File file2 = jfc.getSelectedFile();
System.out.println(file2);
// 1、创建JSch类,好比是FlashFXP工具
JSch jsch = new JSch();
// 2、创建本次的文件传输会话对象,并连接到SFTP服务器。它好比是通过FlashFXP工具连接到SFTP服务器
Session session = jsch.getSession(username, url, 22);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
// 3、在该session会话中开启一个SFTP通道,之后就可以在该通道中进行文件传输了
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
FileInputStream input = null;
// 4、进行文件传输操作:put()、get()....
input = new FileInputStream(file2);
String dst = "/opt/222.txt";
channelSftp.put(input, dst, ChannelSftp.OVERWRITE);
input.close();
} catch (Exception e2) {
e2.printStackTrace();
}
// 5、操作完毕后,关闭通道并退出本次会话
if (channelSftp != null && channelSftp.isConnected()) {
channelSftp.disconnect();
}
}
}