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

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
          * 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();    
     }    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值