一、前言
通过java基于jsch源码包定义sftp的安全文件传送协议SftpClient工具类,实现连接Centos的Linux操作系统进行文件及文件夹的浏览、创建、删除及上传下载等常用操作,详情参见代码示例。
二、代码示例
依赖包说明 - http://www.xwood.net/xwood-gw/mvn-libs/com/jcraft/jsch/
<dependency> @b@ <groupId>com.jcraft</groupId>@b@ <artifactId>jsch</artifactId>@b@ <packaging>jar</packaging>@b@ <version>0.1.44-1</version>@b@</dependency>
package sftp;@b@@b@import java.io.File; @b@import java.io.FileInputStream; @b@import java.io.FileOutputStream;@b@import java.io.InputStream;@b@import java.util.Properties; @b@import java.util.Vector; @b@ @b@import com.jcraft.jsch.Channel; @b@import com.jcraft.jsch.ChannelSftp; @b@import com.jcraft.jsch.JSch; @b@import com.jcraft.jsch.Session; @b@import com.jcraft.jsch.SftpException; @b@ @b@public class SftpClient{ @b@ @b@ /** @b@ * 链接sftp @b@ * @param host 主机 @b@ * @param port 端口 @b@ * @param username 用户名 @b@ * @param password 密码 @b@ * @return @b@ */ @b@ public static ChannelSftp connect(String host, int port, String username,String password) { @b@ @b@ ChannelSftp sftp = null; @b@ try { @b@ JSch jsch = new JSch(); @b@ jsch.getSession(username, host, port); @b@ Session sshSession = jsch.getSession(username, host, port); @b@ System.out.println("Session创建成功"); @b@ sshSession.setPassword(password); @b@ System.out.println("密码输入成功");@b@ Properties sshConfig = new Properties(); @b@ sshConfig.put("StrictHostKeyChecking", "no");@b@ System.out.println("链接参数设置成功");@b@ sshSession.setConfig(sshConfig); @b@ sshSession.connect(); @b@ System.out.println("Session已连接"); @b@ Channel channel = sshSession.openChannel("sftp"); @b@ channel.connect(); @b@ sftp = (ChannelSftp) channel; @b@ System.out.println("连接到主机" + host + "."); @b@ } catch (Exception e) { @b@ e.printStackTrace(); @b@ } @b@ return sftp; @b@ } @b@ @b@ /** @b@ * 文件重命名 @b@ * @param directory 目录 @b@ * @param oldname 旧文件名 @b@ * @param newname 新文件名 @b@ * @param sftp @b@ */ @b@ public static void renameFile(String directory, String oldname, String newname, @b@ ChannelSftp sftp) { @b@ try { @b@ sftp.cd(directory); @b@ sftp.rename(oldname, newname); @b@ } catch (Exception e) { @b@ e.printStackTrace(); @b@ } @b@ } @b@ @b@ /** @b@ * 文件上传 @b@ * @param directory 目录 @b@ * @param uploadFile 要上传的文件名 @b@ * @param sftp @b@ */ @b@ public static void upload(String directory, String uploadFile, ChannelSftp sftp) { @b@ try { @b@ sftp.cd(directory); @b@ File file = new File(uploadFile); @b@ sftp.put(new FileInputStream(file), file.getName()); @b@ } catch (Exception e) { @b@ e.printStackTrace(); @b@ } @b@ } @b@ @b@ @b@ public static void upload(String directory,String sftpFileName,InputStream input, ChannelSftp sftp) throws SftpException{@b@ try {@b@ sftp.cd(directory);@b@ } catch (Exception e) {@b@ }@b@ sftp.put(input, sftpFileName);@b@ }@b@ @b@ /** @b@ * 文件下载 @b@ * @param directory 目录 @b@ * @param downloadFile 要下载文件名 @b@ * @param saveFile 保持的文件名 @b@ * @param sftp @b@ */ @b@ public static void download(String directory, String downloadFile, @b@ String saveFile, ChannelSftp sftp) { @b@ try { @b@ sftp.cd(directory); @b@ File file = new File(saveFile); @b@ sftp.get(downloadFile, new FileOutputStream(file)); @b@ } catch (Exception e) { @b@ e.printStackTrace(); @b@ } @b@ } @b@ @b@ /** @b@ * 文件删除 @b@ * @param directory 目录 @b@ * @param deleteFile 要删除的文件名 @b@ * @param sftp @b@ */ @b@ public static void delete(String directory, String deleteFile, ChannelSftp sftp) { @b@ try { @b@ sftp.cd(directory); @b@ sftp.rm(deleteFile); @b@ System.out.println("删除成功"); @b@ } catch (Exception e) { @b@ System.out.println("删除失败"); @b@ e.printStackTrace(); @b@ } @b@ } @b@ @b@ /** @b@ * 列出目录下的文件 @b@ * @param directory 目录 @b@ * @param sftp @b@ * @return @b@ * @throws SftpException @b@ */ @b@ public static Vector listFiles(String directory, ChannelSftp sftp) @b@ throws SftpException { @b@ return sftp.ls(directory); @b@ } @b@ @b@ @b@ //批量删除文件@b@ public static void delete(String directory, String[] fileNames, ChannelSftp aa) {@b@ for (String fileName : fileNames) {@b@ delete(directory, fileName, aa);@b@ }@b@ }@b@ @b@ /**@b@ * 创建目录文件夹@b@ * @param directory 要创建文件夹的位置路径@b@ * @param fileName 要创建文件夹的名称@b@ * @param sftp sftp连接@b@ */@b@ public static void mkdir(String directory,String fileName,ChannelSftp sftp){@b@ try { @b@ sftp.cd(directory); @b@ sftp.mkdir(fileName); @b@ System.out.println("文件夹创建成功"); @b@ } catch (Exception e) { @b@ System.out.println("文件夹创建失败"); @b@ e.printStackTrace(); @b@ } @b@ }@b@ @b@ @b@ public static void main(String[] args) throws Exception{@b@ @b@ ChannelSftp cftp=SftpClient.connect("192.168.1.123",22, "root", "123456");@b@ @b@ SftpClient.upload("/home/tmp/", "C:\\logs\\dps-engine_error.log", cftp);@b@ @b@ }@b@ @b@ @b@}
控制台打印结果
Session创建成功@b@密码输入成功@b@链接参数设置成功@b@Session已连接@b@连接到主机192.168.1.123.