zoukankan      html  css  js  c++  java
  • linux scp 远程获取文件

    需要的jar包:ganymed-ssh2-build210.jar


    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.SCPClient;

    public class Scpclient {

        // public Scpclient(){}
        static private Scpclient instance;

        static synchronized public Scpclient getInstance(String IP, int port,
                String username, String passward) {
            if (instance == null) {
                instance = new Scpclient(IP, port, username, passward);
            }
            return instance;
        }

        public Scpclient(String IP, int port, String username, String passward) {
            this.ip = IP;
            this.port = port;
            this.username = username;
            this.password = passward;
        }

       
        public void getFile(String remoteFile, String localTargetDirectory) {
            Connection conn = new Connection(ip,port);
            try {
                conn.connect();
                boolean isAuthenticated = conn.authenticateWithPassword(username,
                        password);
                if (isAuthenticated == false) {
                    System.err.println("authentication failed");
                }
                SCPClient client = new SCPClient(conn);
                client.get(remoteFile, localTargetDirectory);
                conn.close();
            } catch (IOException ex) {
                Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null,ex);
            }
        }

       
        public void putFile(String localFile, String remoteTargetDirectory) {
            Connection conn = new Connection(ip,port);
            try {
                conn.connect();
                boolean isAuthenticated = conn.authenticateWithPassword(username,
                        password);
                if (isAuthenticated == false) {
                    System.err.println("authentication failed");
                }
                SCPClient client = new SCPClient(conn);
                client.put(localFile, remoteTargetDirectory);
                conn.close();
            } catch (IOException ex) {
                Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null,ex);
            }
        }
       
       
        public void putFile(String localFile, String remoteFileName,String remoteTargetDirectory,String mode) {
            Connection conn = new Connection(ip,port);
            try {
                conn.connect();
                boolean isAuthenticated = conn.authenticateWithPassword(username,
                        password);
                if (isAuthenticated == false) {
                    System.err.println("authentication failed");
                }
                SCPClient client = new SCPClient(conn);
                if((mode == null) || (mode.length() == 0)){
                    mode = "0600";
                }
                client.put(localFile, remoteFileName, remoteTargetDirectory, mode);
               
                //重命名
                ch.ethz.ssh2.Session sess = conn.openSession();
                String tmpPathName = remoteTargetDirectory +File.separator+ remoteFileName;
                String newPathName = tmpPathName.substring(0, tmpPathName.lastIndexOf("."));
                sess.execCommand("mv " + remoteFileName + " " + newPathName);//重命名回来
               
                conn.close();
            } catch (IOException ex) {
                Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null,ex);
            }
        }
       
    //    public void putFile(String localFile, String remoteFileName,String remoteTargetDirectory) {
    //        Connection conn = new Connection(ip,port);
    //        try {
    //            conn.connect();
    //            boolean isAuthenticated = conn.authenticateWithPassword(username,
    //                    password);
    //            if (isAuthenticated == false) {
    //                System.err.println("authentication failed");
    //            }
    //            SCPClient client = new SCPClient(conn);
    //            client.put(getBytes(localFile), remoteFileName, remoteTargetDirectory);
    //            conn.close();
    //        } catch (IOException ex) {
    //            Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null,ex);
    //        }
    //    }
       
        public static byte[] getBytes(String filePath) {
            byte[] buffer = null;
            try {
                File file = new File(filePath);
                FileInputStream fis = new FileInputStream(file);
                ByteArrayOutputStream byteArray = new ByteArrayOutputStream(1024*1024);
                byte[] b = new byte[1024*1024];
                int i;
                while ((i = fis.read(b)) != -1) {
                    byteArray.write(b, 0, i);
                }
                fis.close();
                byteArray.close();
                buffer = byteArray.toByteArray();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return buffer;
        }

        private String ip;
        private int port;
        private String username;
        private String password;

        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 int getPort() {
            return port;
        }

        public void setPort(int port) {
            this.port = port;
        }

    }

    调用方法:
    Scpclient scp = Scpclient.getInstance(ip, port,uname,pwd);
    scp.putFile("本地文件路径", fileFeed.getName()+".tmp", "推送文件,到服务器的目录路径", null);
    scp.getFile(remoteFile, localTargetDirectory);

  • 相关阅读:
    DWR3.0 如何应用的简单介绍(有实例)
    细线表格样式
    myeclipse不编译解决方法
    DORADO中resoler&dataProvider的常用方法
    jBPM插件下载地址及jBPM配置视频
    dorado要点总结
    千万级数据库(MSSQL)删除重复记录
    Dorado 7 IDE下载地址
    WIN CE和电脑之间的文件拷贝(2) Form1.cs文件
    获取所有存储过程源码替换存储过程方法
  • 原文地址:https://www.cnblogs.com/superjt/p/2661025.html
Copyright © 2011-2022 走看看