sftp上传文件代码

今天,在工作中,写一点关于sftp上传文件的代码,主要分为连接、上传、断开3个步骤,其代码如下:

/**
  * sftp连接
  *
  * @author fengbo 20140226
  */

public void connect(String username, String host, int port, String password) {
  try {
   if (sftp != null) {
    log.info("sftp is not null");
   }
   JSch jsch = new JSch();
   jsch.getSession(username, host, port);
   Session sshSession = jsch.getSession(username, host, port);
   log.info("Session created.");
   sshSession.setPassword(password);
   Properties sshConfig = new Properties();
   sshConfig.put("StrictHostKeyChecking", "no");
   sshSession.setConfig(sshConfig);
   sshSession.connect();
   log.info("Session connected.");
   log.info("Opening Channel.");
   Channel channel = sshSession.openChannel("sftp");
   channel.connect();
   sftp = (ChannelSftp) channel;
   log.info("Connected to " + host + ".");
  } catch (Exception e) {
   throw new SystemException("连接:["+host+"]ftp服务器异常");
  }
 }

 

/**
  * sftp断开连接
  *
  * @author fengbo 20140226
  */
 public void disconnect() {
  if (this.sftp != null) {
   if (this.sftp.isConnected()) {
    this.sftp.disconnect();
   } else if (this.sftp.isClosed()) {
    System.out.println("sftp is closed already");
   }
  }
 }

 

/**
  * 上传文件 流 本地文件路径 remotePath 服务器路径
  *
  * @author fengbo 20140226
  */
 public void upload(File file, String remotName, String remotePath) {
  try {
   // File file = new File(localPath);

   if (file.isFile()) {
    // System.out.println("localFile : " + file.getAbsolutePath());
    String rpath = remotePath; // 服务器需要创建的路径
    try {
     createDir(rpath, sftp);
    } catch (Exception e) {
     throw new SystemException("创建路径失败:" + rpath);
    }

    // this.sftp.rm(file.getName());
    sftp.cd(remotePath);
    this.sftp.put(new FileInputStream(file), remotName);
   }
  } catch (FileNotFoundException e) {
   throw new SystemException("上传文件没有找到");
  } catch (SftpException e) {
   throw new SystemException("上传ftp服务器错误");
  }

 }

/**
  * 创建一个文件目录
  *
  * @param rfilepath
  * @param sftp
  * @author fengbo 20140226
  */
 public void createDir(String createpath, ChannelSftp sftp) {
  try {
   if (isDirExist(createpath)) {
    this.sftp.cd(createpath);
   }
   String pathArry[] = createpath.split("/");
   StringBuffer filePath = new StringBuffer("/");
   for (String path : pathArry) {
    if (path.equals("")) {
     continue;
    }
    filePath.append(path + "/");
    if (isDirExist(filePath.toString())) {
     sftp.cd(filePath.toString());
    } else {
     // 建立目录
     sftp.mkdir(filePath.toString());
     // 进入并设置为当前目录
     sftp.cd(filePath.toString());
    }

   }
   this.sftp.cd(createpath);
  } catch (SftpException e) {
   throw new SystemException("创建路径错误:" + createpath);

  }
 }

 public boolean isDirExist(String directory) {
  boolean isDirExistFlag = false;
  try {
   SftpATTRS sftpATTRS = sftp.lstat(directory);
   isDirExistFlag = true;
   return sftpATTRS.isDir();
  } catch (Exception e) {
   if (e.getMessage().toLowerCase().equals("no such file")) {
    isDirExistFlag = false;
   }
  }
  return isDirExistFlag;
 }

 

其中的jar包我就不再引用了,各位可以把代码放到eclipse中加入对应的jar包即可,谢谢!

你可能感兴趣的:(sftp上传)