sftp处理文件_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > sftp处理文件

sftp处理文件

 2013/9/30 16:09:33  king114963349  程序员俱乐部  我要评论(0)
  • 摘要:最近工作涉及sftp处理文件,写了个工具类,代码已经测试。请需要的同仁自行下载,根据自己需要,修改加工。附件有参考源码及必要jar包。Java代码packagenontax.helper;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util
  • 标签:文件

最近工作涉及sftp处理文件,写了个工具类,代码已经测试。请需要的同仁自行下载,根据自己需要,修改加工。附件有参考源码及必要jar包。

 
Java代码 
package nontax.helper; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Properties; 
  
import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.JSchException; 
import com.jcraft.jsch.Session; 
import com.jcraft.jsch.SftpException; 
/**
* 提供SFTP处理文件服务
* @author Tonny
* @since Apr.27 2012
*
*/ 
public class SFtpHelper { 
    private  JSch jSch = null; 
    private  ChannelSftp sftp = null;//sftp主服务 
    private  Channel channel = null; 
    private  Session session = null; 
     
    private  String hostName="127.0.0.1";//远程服务器地址 
    private  int    port=22;//端口 
    private  String userName="Tonny";//用户名 
    private  String password="123";//密码 
    public SFtpHelper(String hostName, int port, String userName, 
           String password){ 
           this.hostName=hostName; 
           this.port=port; 
           this.userName=userName; 
           this.password=password; 
    } 
  
    /**
     * 连接登陆远程服务器
     * @return
     */ 
    public  boolean connect() throws Exception{ 
        try { 
            jSch= new JSch(); 
            session = jSch.getSession(userName, hostName, port); 
            session.setPassword(password); 
             
            session.setConfig(this.getSshConfig()); 
            session.connect(); 
  
            channel = session.openChannel("sftp"); 
            channel.connect(); 
  
            sftp = (ChannelSftp) channel; 
            System.out.println("登陆成功:"+sftp.getServerVersion()); 
             
        } catch (JSchException e) { 
            System.err.println("SSH方式连接FTP服务器时有JSchException异常!"); 
            System.err.println(e.getMessage()); 
            throw e; 
        } 
        return true; 
    } 
    /**
     * 关闭连接
     * @throws Exception
     */ 
    private void  disconnect() throws Exception { 
        try{ 
            if (sftp.isConnected()) { 
                sftp.disconnect(); 
            } 
            if (channel.isConnected()) { 
                channel.disconnect(); 
            } 
            if (session.isConnected()) { 
                session.disconnect(); 
            } 
        }catch(Exception e){ 
            throw e; 
        } 
     } 
      
 
    /**
     * 获取服务配置
     * @return
     */ 
    private Properties getSshConfig()throws Exception{ 
        Properties sshConfig=null; 
        try{ 
            sshConfig = new Properties(); 
            sshConfig.put("StrictHostKeyChecking", "no"); 
             
        }catch(Exception e){ 
            throw e; 
        } 
        return sshConfig; 
    } 
    /**
     * 下载远程sftp服务器文件
     * @param remotePath
     * @param remoteFilename
     * @param localFilename
     * @return
     */ 
    public  boolean downloadFile(String remotePath, 
            String remoteFilename,String localFilename)throws SftpException, 
            IOException, Exception{ 
        FileOutputStream output = null; 
        boolean success = false; 
        try { 
            if (null != remotePath && remotePath.trim() != "") { 
                sftp.cd(remotePath); 
            } 
  
            File localFile = new File(localFilename); 
            //有文件和下载文件重名 
            if (localFile.exists()) { 
                System.err.println("文件: " + localFilename + " 已经存在!"); 
                return success; 
            } 
            output = new FileOutputStream(localFile); 
            sftp.get(remoteFilename, output); 
            success = true; 
            System.out.println("成功接收文件,本地路径:"+localFilename); 
        } catch (SftpException e) { 
            System.err.println("接收文件时有SftpException异常!"); 
            System.err.println(e.getMessage()); 
            return success; 
        } catch (IOException e) { 
            System.err.println("接收文件时有I/O异常!"); 
            System.err.println(e.getMessage()); 
            return success; 
        } finally { 
            try { 
                if (null != output) { 
                    output.close(); 
                } 
                //关闭连接 
                disconnect(); 
            } catch (IOException e) { 
                System.err.println("关闭文件时出错!"); 
                System.err.println(e.getMessage()); 
            } 
        } 
        return success; 
    } 
    /**
     * 上传文件至远程sftp服务器
     * @param remotePath
     * @param remoteFilename
     * @param localFileName
     * @return
     */ 
    public  boolean uploadFile(String remotePath, 
            String remoteFilename, String localFileName)throws SftpException,Exception  { 
        boolean success = false; 
        FileInputStream fis=null; 
        try { 
            // 更改服务器目录 
            if (null != remotePath && remotePath.trim() != "") { 
                sftp.cd(remotePath); 
            } 
            File localFile = new File(localFileName); 
            fis = new FileInputStream(localFile); 
            // 发送文件 
            sftp.put(fis, remoteFilename); 
            success = true; 
            System.out.println("成功发送文件,本地路径:"+localFileName); 
        } catch (SftpException e) { 
            System.err.println("发送文件时有SftpException异常!"); 
            e.printStackTrace(); 
            System.err.println(e.getMessage()); 
            throw e; 
        } catch (Exception e) { 
            System.err.println("发送文件时有异常!"); 
            System.err.println(e.getMessage()); 
            throw e; 
        } finally { 
            try { 
                if (null != fis) { 
                    fis.close(); 
                } 
                //关闭连接 
                disconnect(); 
            } catch (IOException e) { 
                System.err.println("关闭文件时出错!"); 
                System.err.println(e.getMessage()); 
            } 
        } 
        return success; 
    } 
  
     /**
     * 上传文件至远程sftp服务器
     * @param remotePath
     * @param remoteFilename
     * @param input
     * @return
     */ 
    public  boolean uploadFile(String remotePath, 
            String remoteFilename, InputStream input)throws SftpException,Exception  { 
        boolean success = false; 
        try { 
            // 更改服务器目录 
            if (null != remotePath && remotePath.trim() != "") { 
                sftp.cd(remotePath); 
            } 
  
            // 发送文件 
            sftp.put(input, remoteFilename); 
            success = true; 
        } catch (SftpException e) { 
            System.err.println("发送文件时有SftpException异常!"); 
            e.printStackTrace(); 
            System.err.println(e.getMessage()); 
            throw e; 
        } catch (Exception e) { 
            System.err.println("发送文件时有异常!"); 
            System.err.println(e.getMessage()); 
            throw e; 
        } finally { 
            try { 
                if (null != input) { 
                    input.close(); 
                } 
                //关闭连接 
                disconnect(); 
            } catch (IOException e) { 
                System.err.println("关闭文件时出错!"); 
                System.err.println(e.getMessage()); 
            } 
     
        } 
        return success; 
    } 
    /**
     * 删除远程文件
     * @param remotePath
     * @param remoteFilename
     * @return
     * @throws Exception 
     */ 
    public  boolean deleteFile(String remotePath, String remoteFilename) throws Exception { 
        boolean success = false; 
        try { 
            // 更改服务器目录 
            if (null != remotePath && remotePath.trim() != "") { 
                sftp.cd(remotePath); 
            } 
  
            // 删除文件 
            sftp.rm(remoteFilename); 
            System.err.println("删除远程文件"+remoteFilename+"成功!"); 
            success = true; 
        } catch (SftpException e) { 
            System.err.println("删除文件时有SftpException异常!"); 
            e.printStackTrace(); 
            System.err.println(e.getMessage()); 
            return success; 
        } catch (Exception e) { 
            System.err.println("删除文件时有异常!"); 
            System.err.println(e.getMessage()); 
            return success; 
        } finally { 
            //关闭连接 
            disconnect(); 
        } 
        return success; 
    } 
 
    public String getHostName() { 
        return hostName; 
    } 
 
    public void setHostName(String hostName) { 
        this.hostName = hostName; 
    } 
 
    public int getPort() { 
        return port; 
    } 
 
    public void setPort(int port) { 
        this.port = port; 
    } 
 
    public String getUserName() { 
        return userName; 
    } 
 
    public void setUserName(String userName) { 
        this.userName = userName; 
    } 
 
    public String getPassword() { 
        return password; 
    } 
 
    public void setPassword(String password) { 
        this.password = password; 
    } 
    /**
     *测试方法
     *
     */ 
    public static void main(String [] args){ 
        try{ 
            SFtpHelper  sftp=new SFtpHelper("192.168.1.2",22,"ftp","sftp_test"); 
            System.out.println(new StringBuffer().append(" 服务器地址: ").append(sftp.getHostName()).append(" 端口:") 
                       .append(sftp.getPort()).append("用户名:").append(sftp.getUserName()).append("密码:") 
                         .append(sftp.getPassword().toString())); 
            sftp.connect(); 
//          sftp.downloadFile("\\", "test.txt", "D:\\work\\test.txt"); 
//          sftp.uploadFile("\\", "test.txt", "D:\\work\\readMe.txt"); 
//          sftp.deleteFile("\\", "test.txt"); 
        }catch(Exception e){ 
            System.out.println("异常信息:" + e.getMessage()); 
        } 
    } 

  
发表评论
用户名: 匿名