您的位置:首页 > 编程语言 > Java开发

Xftp 与ftp 类似,安全性要较高。java实现操作sftp需要第三方的jar包,本例使用

2013-11-18 16:37 435 查看
package xftp; 

 

import java.io.BufferedReader; 

import java.io.File; 

import java.io.FileInputStream; 

import java.io.FileOutputStream; 

import java.io.IOException; 

import java.io.InputStream; 

import java.io.InputStreamReader; 

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; 

 

/**

 * @author handongwei

 */ 

public class SftpRead { 

 

    /**

     * 连接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; 

            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); 

            FileOutputStream out = new FileOutputStream(file); 

             

            InputStream in = sftp.get(downloadFile); 

             

            BufferedReader bf = new BufferedReader(new InputStreamReader(in)); 

            StringBuffer sb = new StringBuffer(); 

             

            String line = null; 

            while((line = bf.readLine()) != null){ 

                sb.append(line + "\n"); 

            } 

             

            System.out.println(sb); 

            sftp.get(downloadFile,out); 

            if (out != null) 

            { 

                out.close(); 

            } 

            if (in != null) 

            { 

                in.close(); 

            } 

             

        } 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 listFiles(String directory, ChannelSftp sftp) 

            throws SftpException { 

        return sftp.ls(directory); 

    } 

 

    public static void main(String[] args) { 

        SftpRead sf = new SftpRead(); 

        String host = "10.0.1.3"; 

        int port = 22; 

        String username = "weblogic"; 

        String password = "weblogic_iss"; 

        String directory = "/home/weblogic/bea103/user_projects/domains/ybttest_domain/log/BM"; 

        String uploadFile = "D:\\tmp\\upload.txt"; 

        String downloadFile = "debug.log"; 

        String saveFile = "D:\\tmp\\download.txt"; 

        String deleteFile = "delete.txt"; 

        ChannelSftp sftp = sf.connect(host, port, username, password); 

//      sf.upload(directory, uploadFile, sftp);  

        sf.download(directory, downloadFile, saveFile, sftp); 

//      sf.delete(directory, deleteFile, sftp);  

        try { 

//          sftp.cd(directory);  

//          sftp.mkdir("ss");  

//          System.out.println("finished");  

             

            sftp.quit(); 

            System.out.println(sftp.isClosed()); 

             

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

    } 

     

     

    public String convertStreamToString(InputStream is) {    

        /*

          * To convert the InputStream to String we use the BufferedReader.readLine()

          * method. We iterate until the BufferedReader return null which means

          * there's no more data to read. Each line will appended to a StringBuilder

         
4000
* and returned as String.

          */   

         BufferedReader reader = new BufferedReader(new InputStreamReader(is));    

         StringBuilder sb = new StringBuilder();    

   

         String line = null;    

        try {    

            while ((line = reader.readLine()) != null) {    

                 sb.append(line + "\n");    

             }    

         } catch (IOException e) {    

             e.printStackTrace();    

         } finally {    

            try {    

                 is.close();    

             } catch (IOException e) {    

                 e.printStackTrace();    

             }    

         }    

   

        return sb.toString();    

     }    

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: