日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SFTP例子2----使用JSch实现SFTP文件传输

發(fā)布時(shí)間:2025/3/19 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SFTP例子2----使用JSch实现SFTP文件传输 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、JSch開(kāi)發(fā)包下載

? ? ?http://www.jcraft.com/jsch/

? ? ?目前最新版本為:jsch-0.1.51

?

2、簡(jiǎn)單例子,列出指定目錄下的文件列表

import?java.util.Properties; import?java.util.Vector;import?com.jcraft.jsch.ChannelSftp; import?com.jcraft.jsch.JSch; import?com.jcraft.jsch.Session;public?class?Demo003?{/***?@param?args*/public?static?void?main(String[]?args)?throws?Exception{JSch?jsch?=?new?JSch();Session?session?=?jsch.getSession("cmb",?"localhost");session.setPassword("cmb123");Properties?config?=?new?Properties();config.put("StrictHostKeyChecking",?"no");session.setConfig(config);session.connect();ChannelSftp?channelSftp?=?(ChannelSftp)session.openChannel("sftp");channelSftp.connect();channelSftp.setFilenameEncoding("gbk");Vector?vector??=?channelSftp.ls("/");try{for(Object?obj?:vector){if(obj?instanceof?com.jcraft.jsch.ChannelSftp.LsEntry){String?fileName?=?((com.jcraft.jsch.ChannelSftp.LsEntry)obj).getFilename();System.out.println(fileName);}}}finally{channelSftp.quit();session.disconnect();}}}

3、JSch實(shí)現(xiàn)SFTP功能一些主要類(lèi)的介紹

1)JSch 類(lèi)

?

2)Session 會(huì)話對(duì)象類(lèi)

?

3)ChannelSFTP類(lèi)

ChannelSFTP類(lèi)是JSch實(shí)現(xiàn)SFTP核心類(lèi),它提供了一些SFTP常見(jiàn)的操作方法,如下

方法名方法說(shuō)明
put() ??文件上傳
get()?文件下載
cd() ??進(jìn)入指定目錄
ls() ??得到指定目錄下的文件列表
rename()?重命名(移動(dòng))指定文件或目錄
rm() ??刪除指定文件
mkdir()創(chuàng)建目錄
rmdir()刪除目錄(只允許刪除空目錄)

注:以上這些方法都有很多重載方法

?

4)SftpProgressMonitor 傳輸進(jìn)度監(jiān)控類(lèi)

?

?

5)LsEntry 可以認(rèn)為是文件服務(wù)器上的文件條目信息,把包含文件或者目錄相關(guān)屬性 。ls命令返回的Vector中的就是LsEntry對(duì)象列表

?

?

?

4、SFTP文件傳輸?shù)膶?shí)現(xiàn)步驟

//1、創(chuàng)建JSch類(lèi),好比是FlashFXP工具

? ?JSch?jsch?=?new?JSch();

????????

???//2、創(chuàng)建本次的文件傳輸會(huì)話對(duì)象,并連接到SFTP服務(wù)器。它好比是通過(guò)FlashFXP工具連接到SFTP服務(wù)器

???session?=?jsch.getSession(username,?host,?port);

???session.setPassword(passwd);

? ?Properties?config?=?new?Properties();

? ?config.put("StrictHostKeyChecking",?"no");

???session.setConfig(config);

???session.connect();

???try{

? ?//3、在該session會(huì)話中開(kāi)啟一個(gè)SFTP通道,之后就可以在該通道中進(jìn)行文件傳輸了

???????channelSftp?=?(ChannelSftp)session.openChannel("sftp");

???????channelSftp.connect();

? ?}catch(Exception?e){

? ? ? ?e.printStackTrace();

? ? ? ?disConnect();

???????throw?e;

? ?}

????????

???//4、進(jìn)行文件傳輸操作:put()、get()....

???channelSftp.put(...)

????????

???//5、操作完畢后,關(guān)閉通道并退出本次會(huì)話

???if(channelSftp!=null?&&?channelSftp.isConnected()){

? ? ? ? channelSftp.disconnect();

? ?}

????????

???if(session!=null?&&?session.isConnected()){

? ? ? ? session.disconnect();

? ?}

?

?

?

?

5、JSch中文亂碼處理

? ? ?使用jsch-0.1.51進(jìn)行SFTP文件傳輸時(shí),對(duì)中文處理會(huì)出現(xiàn)亂碼,并且也無(wú)法通過(guò)setFileNameEncoding()方法來(lái)設(shè)置編碼。

? ? ?解決方案:

? ? ? ? ?下載jsch-0.1.51源代碼,在ChannelSFTP.java文件中找到SENDINIT( )方法,修改紅色部分的內(nèi)容

? ? ? ? ???private void sendINIT() throws Exception {

? ? this.packet.reset();

? ? putHEAD((byte)1, 5);

????this.buf.putInt(3); ??//修改為 ?this.buf.putInt(2);

? ? getSession().write(this.packet, this, 9);

? }

?

然后編譯并更改jar中的對(duì)應(yīng)class文件即可。

?

?

? ? ? ? ??

6、ChannelSftp類(lèi)的主要API說(shuō)明如下:

太多就不貼了。。。。


本文轉(zhuǎn)自:http://www.cnblogs.com/itmanxgl/p/fe5d33512609fe540eb08a76e3c4db3a.html?utm_source=tuicool&utm_medium=referral

感謝作者分享!






轉(zhuǎn)載于:https://blog.51cto.com/chengxuyuan/1734965

與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的SFTP例子2----使用JSch实现SFTP文件传输的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。