/** * sftp连接 */ 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断开连接 */ 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 服务器路径 */ 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服务器错误"); } }
/** * 创建一个文件目录 */ 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; }