天天看點

java之Jsch實作Linux的檔案上傳與下載下傳

  一、JSch是Java Secure Channel的縮寫。JSch是一個SSH2的純Java實作。它允許你連接配接到一個SSH伺服器,并且可以使用端口轉發,X11轉發,檔案傳輸等,當然你也可以內建它的功能到你自己的應用程式。

  本文隻介紹如何使用JSch實作的SFTP功能。

  SFTP是Secure File Transfer Protocol的縮寫,安全檔案傳送協定。可以為傳輸檔案提供一種安全的加密方法。SFTP 為 SSH的一部份,是一種傳輸檔案到伺服器的安全方式。SFTP是使用加密傳輸認證資訊和傳輸的資料,是以,使用SFTP是非常安全的。但是,由于這種傳輸方式使用了加密/解密技術,是以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。

  二、需要的依賴包pom.xml

<dependency>
            <groupId>jsch</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.8</version>
        </dependency>      

  三、sftp的通路,以及實作方式

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.io.*;
import java.util.Properties;

public class SftpFile {

    public static void main(String[] args) throws Exception {

        //聲明JSCH對象
        JSch jSch = new JSch();
        //擷取一個Linux會話
        Session session = jSch.getSession("root", "10.0.40.98", 22);
        //設定登入密碼
        session.setPassword("密碼");
        //關閉key的檢驗
        Properties sshConfig = new Properties();
        sshConfig.put("StrictHostKeyChecking", "no");
        session.setConfig(sshConfig);
        //連接配接Linux
        session.connect();
        //通過sftp的方式連接配接
        ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
        channel.connect();
        //上傳檔案
        File file = new File("d:\\1.txt");
        InputStream inputStream = new FileInputStream(file);
        channel.put(inputStream, "/root/file/2.txt");
        //下載下傳檔案
        OutputStream out = new FileOutputStream("d:\\4.txt");
        channel.get("/root/file/1.txt", out);
        //關閉流
        inputStream.close();
        out.close();
    }
}      

  注意:這裡是弄成sftp的方式,其他方式也可以通過這樣的方式來實作。  

  四、Jsch中sftp提供的一些api

put():      檔案上傳
get():      檔案下載下傳
cd():       進入指定目錄
ls():       得到指定目錄下的檔案清單
rename():   重命名指定檔案或目錄
rm():       删除指定檔案
mkdir():    建立目錄
rmdir():    删除目錄