轉載: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服務器。
--|文件上傳
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, |
將本地文件名為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, |
將本地的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開始寫入數據。 |
--|文件下載
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();