SCPClient遠程拉取文件


    在從服務器上拉取測試報告的時候,我查到了可以使用SCPClient,但是有個問題,就是這個只能拉取文件,不能拉取文件夾。不過這也是個知識點,現在我們也總結一下:

SCPClient是一個基本的java操作類,其可以從服務器復制文件到SSH-2服務器,或者從服務器上scp出文件到本地服務器;其操作的scp路徑必須是存在與服務器上的,否則會報錯。

1,     本地文件復制到遠程目錄

創建時使用的模式0600rw

   public void put(String localFile, String remoteTargetDirectory) throws IOException

    {

        put(new String[] { localFile }, remoteTargetDirectory, "0600");

    }

2從遠程服務器下載一組文件到本地目錄

public void get(String remoteFiles[], String localTargetDirectory) throws IOException

通過網上的介紹,我們現在想到,如果要把測試報告從遠程服務器上獲取下來,需要有如下的操作:

1)在本地先建立一個存放測試報告的文件夾,建立的時候先檢測,文件夾是否存在,如果不存在則新建。

2)連接到遠程服務器上,然后執行 “ls 報告所在的文件夾列出所有的文件。

3)按行獲取出所有的文件名,並使用get函數將所有的文件拉取到本地。

經過這三步的循環操作,就能將遠程服務器特定目錄下的文件給復制到本地。示例代碼如下:

package qataskclient;

import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

 

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.SCPClient;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;

 

class PullFiles{

public static void main(String[] args) 

    { 

    String user = "******"; 

    String pass = "*******"; 

    String host = "XXX.XXX.118.39"; 

     String path="sxftest";

     //建立遠程連接

    Connection con = new Connection(host); 

    try { 

        con.connect(); 

        boolean isAuthed = con.authenticateWithPassword(user, pass); 

        System.out.println("isAuthed===="+isAuthed); 

        File folder = new File("d://opt//"+path);

        if (!folder.exists())

        {

            folder.mkdir();

        }

        SCPClient scpClient = con.createSCPClient(); 

        Session session = con.openSession(); 

        session.execCommand("ls /root/"+path);  //進入目錄

        //顯示執行命令后的信息 

        System.out.println("Here is some information about the remote host:"); 

        InputStream stdout = new StreamGobbler(session.getStdout());  

        BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

       

        while (true) 

        { 

            String line = br.readLine(); 

            if (line == null) 

                break; 

            scpClient.get("/root/"+path+"/"+line,"d://opt//"+path); 

            System.out.println(line); 

        } 

        System.out.println("ExitCode: " + session.getExitStatus()); 

        //關閉遠程連接

        session.close(); 

        con.close();          

    } catch (IOException e) { 

        e.printStackTrace(); 

    }  

    }

}

  同樣我們也可以用類似的方法現實現向服務器上傳文件,根據具體的問題,稍微修改一下代碼即可,所以在此我們不再給出示例代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM