首页

通过java基于jsch包实现sftp协议连接linux服务器进行文件及文件夹上传下载、创建及删除等操作代码示例

标签:sftp,安全文件传送协议,安全文件工具类,文件上传下载,linux文件同步,jsch     发布时间:2018-12-01   

一、前言

通过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.