[JSch](是Java Secure Channel的縮寫(xiě)。)
JSch是一個(gè)SSH2的純Java實(shí)現(xiàn)。它允許你連接到一個(gè)SSH服務(wù)器,并且可以使用端口轉(zhuǎn)發(fā),X11轉(zhuǎn)發(fā),文件傳輸?shù)?,?dāng)然你也可以集成它的功能到你自己的應(yīng)用程序。
本demo只介紹如何使用JSch實(shí)現(xiàn)的SFTP功能。SFTP是Secure File Transfer Protocol的縮寫(xiě),安全文件傳送協(xié)議??梢詾閭鬏斘募峁┮环N安全的加密方法。SFTP 為 SSH的一部份,是一種傳輸文件到服務(wù)器的安全方式。SFTP是使用加密傳輸認(rèn)證信息和傳輸?shù)臄?shù)據(jù),所以,使用SFTP是非常安全的。但是,由于這種傳輸方式使用了加密/解密技術(shù),所以傳輸效率比普通的FTP要低得多,如果您對(duì)網(wǎng)絡(luò)安全性要求更高時(shí),可以使用SFTP代替FTP---來(lái)自百度的解釋)
要使用JSch,需要下載它的jar包,請(qǐng)從官網(wǎng)下載它:
ChannelSftp類(lèi)是JSch實(shí)現(xiàn)SFTP核心類(lèi),它包含了所有SFTP的方法,如:
put(): 文件上傳
get(): 文件下載
cd(): 進(jìn)入指定目錄
ls(): 得到指定目錄下的文件列表
rename(): 重命名指定文件或目錄
rm(): 刪除指定文件
mkdir(): 創(chuàng)建目錄
rmdir(): 刪除目錄
等等(這里省略了方法的參數(shù),put和get都有多個(gè)重載方法,具體請(qǐng)看源代碼,這里不一一列出。)
- JSch支持三種文件傳輸模式:
1.OVERWRITE------完全覆蓋模式,這是JSch的默認(rèn)文件傳輸模式,即如果目標(biāo)文件已經(jīng)存在,傳輸?shù)奈募⑼耆采w目標(biāo)文件,產(chǎn)生新的文件.
2.RESUME------恢復(fù)模式,如果文件已經(jīng)傳輸一部分,這時(shí)由于網(wǎng)絡(luò)或其他任何原因?qū)е挛募鬏斨袛?如果下一次傳輸相同的文件,則會(huì)從上一次中斷的地方續(xù)傳
3.APPEND------追加模式,如果目標(biāo)文件已存在,傳輸?shù)奈募⒃谀繕?biāo)文件后追加
文件上傳
實(shí)現(xiàn)文件上傳可以調(diào)用ChannelSftp對(duì)象的put方法。ChannelSftp中有12個(gè)put方法的重載方法:
public void put(String src, String dst)
將本地文件名為src的文件上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,若dst為目錄,則目標(biāo)文件名將與src文件名相同。
采用默認(rèn)的傳輸模式:overwrite
public void put(String src, String dst, int mode)
將本地文件名為src的文件上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,若dst為目錄,則目標(biāo)文件名將與src文件名相同。
指定文件傳輸模式為: mode(mode可選值為:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,ChannelSftp.APPEND)
public void put(String src, String dst, SftpProgressMonitor monitor)
將本地文件名為src的文件上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,若dst為目錄,則目標(biāo)文件名將與src文件名相同。
采用默認(rèn)的傳輸模式:overwrite
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控文件傳輸?shù)倪M(jìn)度。
public void put(String src, String dst,SftpProgressMonitor monitor, int mode)
將本地文件名為src的文件上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,若dst為目錄,則目標(biāo)文件名將與src文件名相同。
指定傳輸模式為: mode
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控文件傳輸?shù)倪M(jìn)度。
public void put(InputStream src, String dst)
將本地的input stream對(duì)象src上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
采用默認(rèn)的傳輸模式:overwrite
public void put(InputStream src, String dst, int mode)
將本地的input stream對(duì)象src上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
指定文件傳輸模式為: mode
public void put(InputStream src, String dst, SftpProgressMonitor monitor)
將本地的input stream對(duì)象src上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
采用默認(rèn)的傳輸模式:overwrite
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控傳輸?shù)倪M(jìn)度。
public void put(InputStream src, String dst,
SftpProgressMonitor monitor, int mode)
將本地的input stream對(duì)象src上傳到目標(biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
指定文件傳輸模式為: mode
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控傳輸?shù)倪M(jìn)度。
public OutputStream put(String dst)
該方法返回一個(gè)輸出流,可以向該輸出流中寫(xiě)入數(shù)據(jù),最終將數(shù)據(jù)傳輸?shù)侥繕?biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
采用默認(rèn)的傳輸模式:overwrite
public OutputStream put(String dst, final int mode)
該方法返回一個(gè)輸出流,可以向該輸出流中寫(xiě)入數(shù)據(jù),最終將數(shù)據(jù)傳輸?shù)侥繕?biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
指定文件傳輸模式為: mode
public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode)
該方法返回一個(gè)輸出流,可以向該輸出流中寫(xiě)入數(shù)據(jù),最終將數(shù)據(jù)傳輸?shù)侥繕?biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
指定文件傳輸模式為: mode
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控傳輸?shù)倪M(jìn)度。
public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode, long offset)
該方法返回一個(gè)輸出流,可以向該輸出流中寫(xiě)入數(shù)據(jù),最終將數(shù)據(jù)傳輸?shù)侥繕?biāo)服務(wù)器,目標(biāo)文件名為dst,dst不能為目錄。
指定文件傳輸模式為: mode
并使用實(shí)現(xiàn)了SftpProgressMonitor接口的monitor對(duì)象來(lái)監(jiān)控傳輸?shù)倪M(jìn)度。
offset指定了一個(gè)偏移量,從輸出流偏移offset開(kāi)始寫(xiě)入數(shù)據(jù)。