SFTP--JAVA


轉載:https://blog.csdn.net/rangqiwei/article/details/9002046

轉載:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html

轉載:http://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html

JSch

定義:JSch 是SSH2的一個純Java實現。它允許你連接到一個sshd 服務器,使用端口轉發,X11轉發,文件傳輸等等。你可以將它的功能集成到你自己的程序中。同時該項目也提供一個J2ME版本用來在手機上直連SSHD服務器。

--|文件上傳

ChannelSftp類是JSch實現SFTP核心類,它包含了所有SFTP的方法,如:
put():      文件上傳
get():      文件下載
cd():       進入指定目錄
ls():       得到指定目錄下的文件列表
rename():   重命名指定文件或目錄
rm():       刪除指定文件
mkdir():    創建目錄
rmdir():    刪除目錄
等等(這里省略了方法的參數,put和get都有多個重載方法,具體請看源代碼,這里不一一列出。)
 
----|JSch支持三種文件傳輸模式:
OVERWRITE 完全覆蓋模式,這是JSch的默認文件傳輸模式,即如果目標文件已經存在,傳輸的文件將完全覆蓋目標文件,產生新的文件。
RESUME

恢復模式,如果文件已經傳輸一部分,這時由於網絡或其他任何原因導致文件傳輸中斷,如果下一次傳輸相同的文件,

則會從上一次中斷的地方續傳。

APPEND 追加模式,如果目標文件已存在,傳輸的文件將在目標文件后追加。

 

----|實現文件上傳可以調用ChannelSftp對象的put方法。ChannelSftp中有12個put方法的重載方法:

public void put(String src, String dst)

將本地文件名為src的文件上傳到目標服務器,目標文件名為dst,若dst為目錄,則目標文件名將與src文件名相同。

采用默認的傳輸模式:OVERWRITE

public void put(String src, String dst, int mode)

將本地文件名為src的文件上傳到目標服務器,目標文件名為dst,若dst為目錄,則目標文件名將與src文件名相同。

指定文件傳輸模式為mode(mode可選值為:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,

ChannelSftp.APPEND)

 

public void put(String src, String dst, SftpProgressMonitor monitor)

將本地文件名為src的文件上傳到目標服務器,目標文件名為dst,若dst為目錄,則目標文件名將與src文件名相同。

采用默認的傳輸模式:OVERWRITE

並使用實現了SftpProgressMonitor接口的monitor對象來監控文件傳輸的進度。

public void put(String src, String dst, 
SftpProgressMonitor monitor, int mode)

將本地文件名為src的文件上傳到目標服務器,目標文件名為dst,若dst為目錄,則目標文件名將與src文件名相同。

指定傳輸模式為mode

並使用實現了SftpProgressMonitor接口的monitor對象來監控文件傳輸的進度。

public void put(InputStream src, String dst)

將本地的input stream對象src上傳到目標服務器,目標文件名為dst,dst不能為目錄。

采用默認的傳輸模式:OVERWRITE

public void put(InputStream src, String dst, int mode)

將本地的input stream對象src上傳到目標服務器,目標文件名為dst,dst不能為目錄。

指定文件傳輸模式為mode

public void put(InputStream src, String dst, SftpProgressMonitor monitor)

將本地的input stream對象src上傳到目標服務器,目標文件名為dst,dst不能為目錄。

采用默認的傳輸模式:OVERWRITE

並使用實現了SftpProgressMonitor接口的monitor對象來監控傳輸的進度。

public void put(InputStream src, String dst, 
SftpProgressMonitor monitor, int mode)

將本地的input stream對象src上傳到目標服務器,目標文件名為dst,dst不能為目錄。

指定文件傳輸模式為mode

並使用實現了SftpProgressMonitor接口的monitor對象來監控傳輸的進度。

public OutputStream put(String dst)

該方法返回一個輸出流,可以向該輸出流中寫入數據,最終將數據傳輸到目標服務器,目標文件名為dst,dst不能為目錄。

采用默認的傳輸模式:OVERWRITE

public OutputStream put(String dst, final int mode)

該方法返回一個輸出流,可以向該輸出流中寫入數據,最終將數據傳輸到目標服務器,目標文件名為dst,dst不能為目錄。

指定文件傳輸模式為mode

public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode) 

該方法返回一個輸出流,可以向該輸出流中寫入數據,最終將數據傳輸到目標服務器,目標文件名為dst,dst不能為目錄。

指定文件傳輸模式為mode

並使用實現了SftpProgressMonitor接口的monitor對象來監控傳輸的進度。

public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode, long offset)

該方法返回一個輸出流,可以向該輸出流中寫入數據,最終將數據傳輸到目標服務器,目標文件名為dst,dst不能為目錄。

指定文件傳輸模式為mode

並使用實現了SftpProgressMonitor接口的monitor對象來監控傳輸的進度。

offset指定了一個偏移量,從輸出流偏移offset開始寫入數據。

 

--|文件下載

JSch文件下載是通過調用ChannelSftp對象的get方法來實現的。ChannelSftp中有9個get方法的重載方法:
 
publicvoid get(String src, String dst)
將目標服務器上文件名為src的文件下載到本地,本地文件名為dst。若dst為目錄,則下載到本地的文件名將與src文件名相同。(注:src必須是文件,不能為目錄)
采用默認的傳輸模式:OVERWRITE
publicvoid get(String src, String dst,  SftpProgressMonitor monitor)
將目標服務器上文件名為src的文件下載到本地,本地文件名為dst。若dst為目錄,則下載到本地的文件名將與src文件名相同。(注:src必須是文件,不能為目錄)
采用默認的傳輸模式:OVERWRITE
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
publicvoid get(String src, String dst, SftpProgressMonitor monitor, int mode)
將目標服務器上文件名為src的文件下載到本地,本地文件名為dst。若dst為目錄,則下載到本地的文件名將與src文件名相同。(注:src必須是文件,不能為目錄)
指定文件傳輸模式為mode(mode可選值為:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,ChannelSftp.APPEND)
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
publicvoid get(String src, OutputStream dst)
將目標服務器上文件名為src的文件下載到本地,下載的數據寫入到輸出流對象dst(如:文件輸出流)。
采用默認的傳輸模式:OVERWRITE
publicvoid get(String src, OutputStream dst,  SftpProgressMonitor monitor)
將目標服務器上文件名為src的文件下載到本地,下載的數據寫入到輸出流對象dst(如:文件輸出流)。
采用默認的傳輸模式:OVERWRITE
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
publicvoid get(String src, OutputStream dst,  SftpProgressMonitor monitor, int mode, long skip)
將目標服務器上文件名為src的文件下載到本地,下載的數據寫入到輸出流對象dst(如:文件輸出流)。
指定文件傳輸模式為mode
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
skip指定了一個跳讀量,即下載時從src文件跳過skip字節的數據。(一般不推薦使用該參數,默認設為0)
public InputStream get(String src)
該方法返回一個輸入流,該輸入流含有目標服務器上文件名為src的文件數據。可以從該輸入流中讀取數據,最終將數據傳輸到本地(如:讀取數據后將數據寫入到本地的文件中)
(注:該方法不支持多種文件傳輸模式,如何讀取與保存數據由應用程序自己確定)
public InputStream get(String src, SftpProgressMonitor monitor)
該方法返回一個輸入流,該輸入流含有目標服務器上文件名為src的文件數據。可以從該輸入流中讀取數據,最終將數據傳輸到本地(如:讀取數據后將數據寫入到本地的文件中)
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
(注:該方法不支持多種文件傳輸模式,如何讀取與保存數據由應用程序自己確定)
public InputStream get(String src, final SftpProgressMonitor monitor, finallong skip)
該方法返回一個輸入流,該輸入流含有目標服務器上文件名為src的文件數據。可以從該輸入流中讀取數據,最終將數據傳輸到本地(如:讀取數據后將數據寫入到本地的文件中)
並使用實現了SftpProgressMonitor接口的monitor對象來監控文件的傳輸進度。
(注:該方法不支持多種文件傳輸模式,如何讀取與保存數據由應用程序自己確定)
skip指定了一個跳讀量,即下載時從src文件跳過skip字節的數據。(一般不推薦使用該參數,默認設為0)

--|核心

  JSch jsch = new JSch();
  session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根據用戶名,主機ip,端口獲取一個Session對象
  session.setPassword(ftpPassword); // 設置密碼
  config.put("StrictHostKeyChecking", "no");
  session.setConfig(config); // 為Session對象設置properties
  session.setTimeout(timeout); // 設置timeout時間
  session.connect(); // 通過Session建立鏈接
  channel = session.openChannel("sftp"); // 打開SFTP通道
  channel.connect(); // 建立SFTP通道的連接
  channel.disconnect();
  session.disconnect();


免責聲明!

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



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