在從服務器上拉取測試報告的時候,我查到了可以使用SCPClient,但是有個問題,就是這個只能拉取文件,不能拉取文件夾。不過這也是個知識點,現在我們也總結一下:
SCPClient是一個基本的java操作類,其可以從服務器復制文件到SSH-2服務器,或者從服務器上scp出文件到本地服務器;其操作的scp路徑必須是存在與服務器上的,否則會報錯。
1, 本地文件復制到遠程目錄
創建時使用的模式0600 即rw
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();
}
}
}
同樣我們也可以用類似的方法現實現向服務器上傳文件,根據具體的問題,稍微修改一下代碼即可,所以在此我們不再給出示例代碼。