• java-jsch实现sftp文件操作


     

    (曾在天涯)的文章详细讲解了jsch中的函数以及用法

    http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html

    http://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html

    下面是一个例子:

    package com.util;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.Properties;
    import java.util.Vector;
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.SftpException;
    import com.jcraft.jsch.ChannelSftp.LsEntry;

    public class Jsch4Sftp {
     /**
      * 连接sftp服务器
      * 
      * @param host
      *            主机
      * @param port
      *            端口
      * @param username
      *            用户名
      * @param password
      *            密码
      * @return
      */
     public ChannelSftp connect(String host, int port, String username,
       String password) {
      ChannelSftp sftp = null;
      try {
       JSch jsch = new JSch();
       jsch.getSession(username, host, port);
       Session sshSession = jsch.getSession(username, host, port);
       System.out.println("Session created.");
       sshSession.setPassword(password);
       Properties sshConfig = new Properties();
       sshConfig.put("StrictHostKeyChecking", "no");
       sshSession.setConfig(sshConfig);
       sshSession.connect();
       System.out.println("Session connected.");
       System.out.println("Opening Channel.");
       Channel channel = sshSession.openChannel("sftp");
       channel.connect();
       sftp = (ChannelSftp) channel;
       // sshSession.disconnect();
       System.out.println("Connected to " + host + ".");
      } catch (Exception e) {

      }
      return sftp;
     }

     /**
      * 上传文件
      * 
      * @param directory
      *            上传的目录
      * @param uploadFile
      *            要上传的文件
      * @param sftp
      */
     public void upload(String directory, String uploadFile, ChannelSftp sftp) {
      try {
       sftp.cd(directory);
       File file = new File(uploadFile);
       sftp.put(new FileInputStream(file), file.getName());
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     /**
      * 下载文件
      * 
      * @param directory
      *            下载目录
      * @param downloadFile
      *            下载的文件
      * @param saveFile
      *            存在本地的路径
      * @param sftp
      */
     public void download(String directory, String downloadFile,
       String saveFile, ChannelSftp sftp) {
      try {
       sftp.cd(directory);
       File file = new File(saveFile);
       sftp.get(downloadFile, new FileOutputStream(file));
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     /**
      * 删除文件
      * 
      * @param directory
      *            要删除文件所在目录
      * @param deleteFile
      *            要删除的文件
      * @param sftp
      */
     public void delete(String directory, String deleteFile, ChannelSftp sftp) {
      try {
       sftp.cd(directory);
       sftp.rm(deleteFile);
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     /**
      * 列出目录下的文件
      * 
      * @param directory
      *            要列出的目录
      * @param sftp
      * @return
      * @throws SftpException
      */
     public Vector<LsEntry> listFiles(String directory, ChannelSftp sftp)
       throws SftpException {
      return sftp.ls(directory);
     }

     public static void main(String[] args) {    
         Jsch4Sftp sf = new Jsch4Sftp();    
            String host = "***";    
            int port = 22; 
            String username = "***";    
            String password = "***";    
            String directory = "/home";    
            String saveFile = "1.zip";    
            String downLoadDirectory = "D:\";    
            ChannelSftp sftp = null;    
            Session sshSession = null;
            try {    
                JSch jsch = new JSch();    
                jsch.getSession(username, host, port);   
                sshSession = jsch.getSession(username, host, port);
                System.out.println("Session created.");    
                sshSession.setPassword(password);   
                Properties sshConfig = new Properties();    
                sshConfig.put("StrictHostKeyChecking", "no");    
                sshSession.setConfig(sshConfig);   
                sshSession.connect();   
                System.out.println("Session connected.");    
                System.out.println("Opening Channel.");    
                Channel channel = sshSession.openChannel("sftp");    
                channel.connect();   
                sftp = (ChannelSftp) channel;   
                System.out.println("Connected to " + host + ".");    
                   
                   
                   
    //          sf.upload(directory, uploadFile, sftp);    
    //          sf.download(directory, downloadFile, saveFile, sftp);    
        //      sf.delete(directory, deleteFile, sftp);    
               
    //          sftp.cd(directory);    
                   
                   
                Vector<LsEntry> v = sf.listFiles(directory, sftp);   
                for (LsEntry e : v) {    
                    if(!e.getFilename().startsWith(".")) {    
                        saveFile = downLoadDirectory + e.getFilename();   
                        sf.download(directory, e.getFilename(), saveFile, sftp);   
                    }   
                }   
                System.out.println("finished");    
            } catch (Exception e) {    
                e.printStackTrace();   
            } finally {    
                sftp.exit();   
                sshSession.disconnect();   
            }   
        }}

  • 相关阅读:
    bzoj3687
    bzoj1930
    splay启发式合并
    学习笔记::启发式合并
    bzoj1798
    java提高篇(三)-----理解java的三大特性之多态
    java提高篇(二)-----理解java的三大特性之继承
    队列的顺序实现(循环数组)与链式实现
    java提高篇(一)-----理解java的三大特性之封装
    设计模式读书笔记-----解释器模式
  • 原文地址:https://www.cnblogs.com/zhangzhen894095789/p/6406597.html
Copyright © 2020-2023  润新知